在Objective-C中保留/释放方法参数是一个好主意吗?

Cli*_*ris 5 objective-c

考虑以下ObjC代码示例:

- (void)doStuffWithString:(NSString *)someParam {
    // Do stuff with someParam
}
Run Code Online (Sandbox Code Playgroud)

如果在多线程应用程序中执行此代码,保留/释放someParam是否是个好主意?具体来说,我正在考虑传入参数是由许多线程共享的单例对象的场景.例如,以下是否更安全?

- (void)doStuffWithString:(NSString *)someParam {
    [stringParam retain];
    // Do stuff with someParam
    [stringParam release];
}
Run Code Online (Sandbox Code Playgroud)

And*_*ant 11

不,尝试为参数提供线程安全不是单个函数的工作.

在堆栈的某处向下传递了作为"doStuffWithString"参数的对象.这个代码应该保证该对象在函数调用的长度内保持有效.

要考虑两件事;

  1. 在您调用第三方或库函数的情况下,这些将不会为您执行保留/释放.
  2. 如果存在删除参数的危险,则可能会在您的"保留"调用发生之前发生!

这个主题也可能有所帮助.