开发者

How do I release an object allocated in a different AutoReleasePool?

I have a problem with the memory management in Objective-C. Say I have a method that allocates an object and stores the reference to this object as a member of the class. If I run through the same function a second time, I need to release this first object before creating a new one to replace it. Supposing that the first line of the function is:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

This means that a different auto-release pool will be in place. The code to allocate the object is as follows:

if (m_object != nil)
    [m_object release];

m_object = [[MyClass alloc] init];
[m_object retain];

The problem is that the pr开发者_JS百科ogram crashes when running the last line of the method:

[pool release];

What am I doing wrong ? How can I fix this ?

Regards

Alan


First get a general understanding of the objective c memory management. You are confusing a lot of different things here. For example you don't have to retain the m_object since alloc already sets up the retain count with 1. Also normally you dont release you AutoReleasePool when you release a object. Like I said look up the documentation for memory management (pretty good actually).


Autorelease pools handle objects that have been specifically autoreleased

Example:

[object autorelease];

You have to have at least one NSAutoreleasePool in your program in case some code attempts to autorelease an object. If this is your only NSAutoreleasePool then releasing the pool maybe causing your problems.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜