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

标签 objective-c

考虑以下 ObjC 代码示例:

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

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

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

最佳答案

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

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

需要考虑两件事;

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

This thread也可能有帮助。

关于objective-c - 在 Objective-C 中保留/释放方法参数是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/555165/

相关文章:

c++ - 尝试从 C 调用 ObjC 方法时出现链接器错误

ios - 将 NSDictionary(带有自定义类)保存到 NSUserDefaults

ios - SDWebImage 在 UITableView 中显示错误的图像

objective-c - 如何制作一个出现在全屏窗口顶部的 Cocoa 窗口?

objective-c - 从 PHAsset 获取缩略图

ios - 类名方法?

iphone - UIActivityViewController 有错误的按钮标题颜色

objective-c - 如何从上到下为 View 设置动画并正确堆叠该 View ?

ios - 如何在 xcode 6.0.1 中运行 ios 8.4.1 设备?

objective-c - 对可能被objective-c中的另一个线程锁定的对象执行 "dirty read"的最佳方法