супер инициация больше не работает - PullRequest
0 голосов
/ 20 января 2012

В одном из моих занятий у меня есть метод -(id) init. Первое, что происходит в этом методе, это вызов [super init]

Это было все нормально, но я недавно импортировал свой старый код в новый проект xcode. Я получаю сообщение об ошибке:

ошибка: проблема с автоматическим подсчетом ссылок: результат вызова инициализации делегата должен быть немедленно возвращен или присвоен 'self'

Почему происходит эта ошибка? потому что это амортизируется в рамках системы ARC? или что-то еще?

Ответы [ 3 ]

3 голосов
/ 20 января 2012

Как ты это сделал со старой системой? Вы ожидаете (в обеих версиях) сделать

self = [super init];

if (self) ...

return self;
1 голос
/ 20 января 2012

Раньше это работало для вас, потому что LLVM намного более строг, чем GCC. GCC не обнаружил ошибку, и, как отметил @vakio в своем комментарии, она работала, потому что где-то в цепочке присутствовал self = [super init]. LLVM обнаруживает эту ошибку во время компиляции и предотвращает компиляцию неверного кода.

0 голосов
/ 03 июля 2015

Это сработало для меня:

нужно назначить что-то в себе.

-(id) init {
   self = [super init];
   return self;
}
...