АВТОМАТИЧЕСКОЕ СПРАВОЧНОЕ СЧЕТА: Указатель на неконфессиональный тип 'nserror *' без явного права собственности
-
25-10-2019 - |
Вопрос
Обновляя некоторые из моего кода, который будет совместим с SDK iOS 5, я попытался реорганизовать свой код, используя «преобразовать в Arc Objective-C» в XCode и получил ошибку. Ошибка возникает в переменной экземпляра в моем файле .h.
NSError **_error;
Ошибка гласит «указатель на неконфессиональный тип« nserror *»без явного владения». Как я могу это исправить?
Решение
При хранении NSError
Объекты в переменной экземпляра вы должны объявить ее как простой указатель:
@interface Foo : NSObject
{
NSError *_errror;
}
NSError **
используется только для косвенного возврата NSError
Объекты из метода к вызывающему. Это (вероятно) ошибка - хранить его в переменной экземпляра.
Другие советы
Вы можете использовать один из пожизненных квалификаций, описанных в Переход к примечаниям по выпуску дуги
Для безразличения ** вы бы использовали __autoreLeasing, поэтому пример, приведенный Nikolai
@interface Foo : NSObject
{
NSError * __autoreleasing *error;
}
Синтаксис немного странно, и вы должны следовать советам Nikolais, но если вы уверены, что nserror ** - это то, что вы хотите, это должно работать.