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: 255
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