2

如果我在 Objective-C 中调用一个带有参数的方法并在后面释放参数。

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

然后我知道参数在 method1 完成后被释放,因为这些行是线性处理的。但是当我在后台线程中调用该方法时:

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

然后主线程释放对象,而后台作业使用参数做某事(接受后,在调用该方法之前,retainCount 将为 1)。由于使用了 Zombie(使用了一个已经被释放的对象),我会得到一个错误吗?

问题是:

方法调用是否保留在作为参数的对象上?或者我是否需要在方法的开头调用retain,如果它像上面的问题一样?

4

1 回答 1

2

文档detachNewThreadSelector:toTarget:withObject:

对象 aTarget 和 anArgument 在分离线程执行期间被保留,然后被释放。

于 2011-05-12T13:44:06.607 回答