在更新我的一些代码以与iOS 5 SDK兼容时,我试图通过在Xcode中使用“转换为Objective-C ARC”来重构我的代码并收到错误。我的.h文件中的实例变量发生错误。
NSError **_error;
错误显示“指向非const类型'NSError *',没有明确的所有权。”我该如何解决这个问题?
答案 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
个对象从方法返回给调用者。将它存储在实例变量中(可能)是一个错误。