2009-02-17 52 views
5

考虑以下ObjC代码示例:在Objective-C中保留/释放方法参数是一个好主意吗?

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

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

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

回答

11

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

某处向上传递的对象是“doStuffWithString”参数。这是应该保证该对象在函数调用期间保持有效的代码。

需要考虑两件事情;

  1. 在您调用第三方或库函数的情况下,这些函数不会为您执行保留/释放。
  2. 如果有param被删除的危险,这可能发生在您致电'retain'之前甚至发生!

This thread也可能有帮助。

相关问题