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

5

考虑以下ObjC代码示例:

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

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

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

11

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

在堆栈的某个地方,某些东西向下传递了作为参数的对象,这段代码应该保证对象在函数调用期间保持有效。

需要考虑两个问题:

  1. 在调用第三方库函数时,它们不会为您执行保留/释放操作。
  2. 如果存在参数被删除的危险,则可能会在您调用'retain'之前发生此情况!

这个线程 也可能会有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接