Do methods call retain on arguments when they get called?
-
12-11-2019 - |
题
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?
解决方案
from the documentation of detachNewThreadSelector:toTarget:withObject:
The objects aTarget and anArgument are retained during the execution of the detached thread, then released.