如果我在 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,如果它像上面的问题一样?