Автоматический подсчет ссылок: указатель на не-const тип 'NSError *' без явного владения
При обновлении некоторых моих кодов, совместимых с iOS 5 SDK, я попытался реорганизовать свой код с помощью "Преобразовать в Objective-C ARC" в Xcode и получил ошибку. Ошибка возникает в переменной экземпляра в моем файле .h.
NSError **_error;
Ошибка говорит "Указатель на не-const type" NSError * 'без явного владения ". Как я могу это исправить?
Ответы
Ответ 1
При хранении объектов NSError
в переменной экземпляра вы должны объявить его как простой указатель:
@interface Foo : NSObject
{
NSError *_errror;
}
NSError **
используется только для косвенного возврата объектов NSError
от метода к вызывающему. Это (возможно) ошибка, чтобы сохранить его в переменной экземпляра.
Ответ 2
Вы можете использовать один из определителей времени жизни, описанный в Переход к заметкам о выпуске ARC
Для NSError ** вы используете __autoreleasing, поэтому пример, предоставленный Николаем, будет выглядеть следующим образом
@interface Foo : NSObject
{
NSError * __autoreleasing *error;
}
Синтаксис немного странный, и вы должны следовать совету Николая, но если вы уверены, что NSError ** - это то, что вы хотите, это должно работать.