Автоматический подсчет ссылок: указатель на неконстантный тип 'NSError *' без явного владельца - PullRequest
30 голосов
/ 18 октября 2011

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

NSError **_error;

Ошибка говорит: «Указатель на неконстантный тип« NSError * »без явного владельца».Как я могу это исправить?

Ответы [ 2 ]

57 голосов
/ 25 апреля 2012

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

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

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

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

18 голосов
/ 18 октября 2011

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

@interface Foo : NSObject
{
    NSError *_errror;
}

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

...