考虑以下 ObjC 代码示例:
- (void)doStuffWithString:(NSString *)someParam {
// Do stuff with someParam
}
如果此代码在多线程应用程序中执行,保留/释放 someParam
是否是个好主意?具体来说,我在考虑传入的参数是多个线程共享的单例对象的场景。例如,以下是否更安全?
- (void)doStuffWithString:(NSString *)someParam {
[stringParam retain];
// Do stuff with someParam
[stringParam release];
}
最佳答案
不,尝试为参数提供线程安全性不是单个函数的工作。
在堆栈的某个地方,一些东西向下传递了作为“doStuffWithString”参数的对象。这是应该保证该对象在函数调用期间保持有效的代码。
需要考虑两件事;
- 在您调用第三方或库函数的情况下,它们不会为您执行保留/释放操作。
- 如果存在删除参数的危险,这可能发生在您调用“保留”之前!
This thread也可能有帮助。
关于objective-c - 在 Objective-C 中保留/释放方法参数是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/555165/