views:

60

answers:

2

Hi,

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 program crashes when running the last line of the method:

[pool release];

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

Regards
Alan

A: 

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.

Tone
+2  A: 

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).

Russo