自动引用计数:指向非const类型"NSError*"的指针,没有明确的所有权

Zim*_*nji 30 objective-c ios ios5 automatic-ref-counting

在更新我的一些代码以与iOS 5 SDK兼容时,我试图通过在Xcode中使用"转换为Objective-C ARC"来重构我的代码并收到错误.我的.h文件中的实例变量发生错误.

NSError **_error;
Run Code Online (Sandbox Code Playgroud)

错误显示"指向非const类型'NSError*',没有明确的所有权." 我该如何解决这个问题?

tap*_*api 57

您可以使用" 转换为ARC发行说明"中描述的生命周期限定符之一

对于NSError**,您使用__autoreleasing,因此Nikolai提供的示例将如下所示

@interface Foo : NSObject
{
    NSError * __autoreleasing *error;
}
Run Code Online (Sandbox Code Playgroud)

语法有点奇怪,你应该遵循Nikolais的建议,但如果你确定NSError**是你想要的,那么这应该有效.

  • 谢谢你的回答!我想补充一点,我也使用了相同语法的其他生命周期限定符,如`NSArray*__strong*array`等. (3认同)
  • 这不会编译,尝试`NSError * __autoreleasing *_error;` (2认同)
  • 这是正确的答案.这是@NikolaiRuhe所说的答案并没有错. (2认同)

Nik*_*uhe 18

NSError在实例变量中存储对象时,必须将其声明为简单指针:

@interface Foo : NSObject
{
    NSError *_errror;
}
Run Code Online (Sandbox Code Playgroud)

NSError **仅用于间接将NSError方法中的对象返回给调用者.将它存储在实例变量中(可能)是一个错误.