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

时间:2011-10-18 08:32:14

标签: objective-c ios ios5 automatic-ref-counting

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

NSError **_error;

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

2 个答案:

答案 0 :(得分:57)

您可以使用Transitioning to ARC Release Notes

中描述的生命周期限定符之一

对于NSError **你会使用__autoreleasing所以Nikolai提供的例子会是这样的

@interface Foo : NSObject
{
    NSError * __autoreleasing *error;
}

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

答案 1 :(得分:18)

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

@interface Foo : NSObject
{
    NSError *_errror;
}

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