考虑以下ObjC代码示例:
- (void)doStuffWithString:(NSString *)someParam { // Do stuff with someParam }
如果在多线程应用程序中执行此代码,保留/释放someParam
是否是个好主意?具体来说,我正在考虑传入参数是由许多线程共享的单例对象的场景.例如,以下是否更安全?
- (void)doStuffWithString:(NSString *)someParam { [stringParam retain]; // Do stuff with someParam [stringParam release]; }
Andrew Grant.. 11
不,尝试为参数提供线程安全不是单个函数的工作.
在堆栈的某处向下传递了作为"doStuffWithString"参数的对象.这个代码应该保证该对象在函数调用的长度内保持有效.
要考虑两件事;
在您调用第三方或库函数的情况下,这些将不会为您执行保留/释放.
如果存在删除参数的危险,则可能会在您的"保留"调用发生之前发生!
这个主题也可能有所帮助.
不,尝试为参数提供线程安全不是单个函数的工作.
在堆栈的某处向下传递了作为"doStuffWithString"参数的对象.这个代码应该保证该对象在函数调用的长度内保持有效.
要考虑两件事;
在您调用第三方或库函数的情况下,这些将不会为您执行保留/释放.
如果存在删除参数的危险,则可能会在您的"保留"调用发生之前发生!
这个主题也可能有所帮助.