ObjectiveC - Releasing objects added as parameters

Posted by NobleK on Stack Overflow See other posts from Stack Overflow or by NobleK
Published on 2011-01-12T20:09:56Z Indexed on 2011/01/12 20:53 UTC
Read the original article Hit count: 254

Ok, here goes.

Being a Java developer I'm still struggling with the memory management in ObjectiveC. I have all the basics covered, but once in a while I encounter a challenge.

What I want to do is something which in Java would look like this:

MyObject myObject = new MyObject(new MyParameterObject());

The constructor of MyObject class takes a parameter of type MyParameterObject which I initiate on-the-fly.

In ObjectiveC I tried to do this using following code:

MyObject *myObject = [[MyObject alloc] init:[[MyParameterObject alloc] init]];

However, running the Build and Analyze tool this gives me a "Potential leak of an object" warning for the MyParameter object which indeed occurs when I test it using Instruments. I do understand why this happens since I am taking ownership of the object with the alloc method and not relinquishing it, I just don't know the correct way of doing it. I tried using

MyObject *myObject = [[MyObject alloc] init:[[[MyParameterObject alloc] init] autorelease]];

but then the Analyze tool told me that "Object sent -autorelease too many times".

I could solve the issue by modifying the init method of MyParameterObject to say return [self autorelease]; in stead of just return self;. Analyze still warnes about a potential leak, but it doesn't actually occur. However I believe that this approach violates the convention for managing memory in ObjectiveC and I really want to do it the right way.

Thanx in advance.

© Stack Overflow or respective owner

Related posts about iphone

Related posts about objective-c