考虑以下ObjC代码示例:
- (void)doStuffWithString:(NSString *)someParam {
// Do stuff with someParam
}
如果在多线程应用程序中执行此代码,保留/释放someParam
是否是个好主意?具体来说,我正在考虑传入参数是由许多线程共享的单例对象的场景。例如,以下是否更安全?
- (void)doStuffWithString:(NSString *)someParam {
[stringParam retain];
// Do stuff with someParam
[stringParam release];
}
答案 0 :(得分:11)
不,尝试为参数提供线程安全不是单个函数的工作。
在堆栈的某处向下传递了作为“doStuffWithString”参数的对象。这个代码应该保证该对象在函数调用的长度内保持有效。
要考虑的两件事情;
This thread也可能有所帮助。