Подтвердить что ты не робот

Автоматический подсчет ссылок: указатель на не-const тип 'NSError *' без явного владения

При обновлении некоторых моих кодов, совместимых с iOS 5 SDK, я попытался реорганизовать свой код с помощью "Преобразовать в Objective-C ARC" в Xcode и получил ошибку. Ошибка возникает в переменной экземпляра в моем файле .h.

NSError **_error;

Ошибка говорит "Указатель на не-const type" NSError * 'без явного владения ". Как я могу это исправить?

4b9b3361

Ответ 1

При хранении объектов NSError в переменной экземпляра вы должны объявить его как простой указатель:

@interface Foo : NSObject
{
    NSError *_errror;
}

NSError ** используется только для косвенного возврата объектов NSError от метода к вызывающему. Это (возможно) ошибка, чтобы сохранить его в переменной экземпляра.

Ответ 2

Вы можете использовать один из определителей времени жизни, описанный в Переход к заметкам о выпуске ARC

Для NSError ** вы используете __autoreleasing, поэтому пример, предоставленный Николаем, будет выглядеть следующим образом

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

Синтаксис немного странный, и вы должны следовать совету Николая, но если вы уверены, что NSError ** - это то, что вы хотите, это должно работать.