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

时间:2009-02-17 00:36:42

标签: objective-c

考虑以下ObjC代码示例:

- (void)doStuffWithString:(NSString *)someParam {
    // Do stuff with someParam
}

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

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

1 个答案:

答案 0 :(得分:11)

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

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

要考虑的两件事情;

  1. 在您调用第三方或库函数的情况下,这些不会为您执行保留/释放。
  2. 如果存在删除参数的危险,这可能会在您“保留”的呼叫发生之前发生!
  3. This thread也可能有所帮助。