【发布时间】:2011-05-12 13:26:32
【问题描述】:
如果我在 Objective-C 中调用带有参数的方法并在后面释放参数。
id argumentI = [Object new];
[ classA method1: argumentI ];
[ argumentI release ];
然后我知道参数是在方法 1 完成后释放的,因为这些行是线性处理的。 但是当我在后台线程中调用该方法时:
[ NSThread detachNewThreadSelector:@selector(method1) toTarget:self withObject:argumentI ];
[ argumentI release ];
然后主线程释放对象,而后台作业将参数用于某事 (通过接受,在调用该方法之前,retainCount 将为 1)。 由于使用了 Zombie(使用已被释放的对象),我会收到错误吗?
问题是:
方法调用是否保留在作为参数的对象上?或者我需要在方法的开头调用retain,如果是像上面的问题?
【问题讨论】:
标签: objective-c memory-management methods concurrent-programming