自动引用计数:指向非常量types“NSError *”的指针,没有明确的所有权

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

NSError **_error; 

错误说“指向非常量types'NSError *'没有明确的所有权。 我该如何解决这个问题?

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

 @interface Foo : NSObject { NSError *_errror; } 

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

您可以使用“ 转换到ARC版本说明”中描述的生命周期限定符之一

对于NSError **,你会使用__autoreleasing,所以Nikolai提供的例子看起来就像这样

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

语法有点怪异,你应该遵循尼古拉斯的build议,但如果你确定NSError **是你想要的,这应该工作。