Question

If I call a method in Objective-C with an argument and releasing the argument afterwords.

id argumentI = [Object new]; 
[ classA method1: argumentI ];
[ argumentI release ];

Then I know the argument is released AFTER method1 is finished, because the lines are processed linear. BUT when I call the method in a background thread:

[ NSThread detachNewThreadSelector:@selector(method1) toTarget:self withObject:argumentI ];
[ argumentI release ];

And then the main thread releases the object, WHILE the background job uses the argument for something (With the acceptance, that the retainCount would be 1 before the method is called). Could I get an Error, because of the use of a Zombie (use of an object, that is already deallocated)?

The question is:

Do the methods call retain on an object that is an argument? Or do I need to call retain at the beginning of the method, if it is like the problem above?

Was it helpful?

Solution

from the documentation of detachNewThreadSelector:toTarget:withObject:

The objects aTarget and anArgument are retained during the execution of the detached thread, then released.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top