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

Как использовать делегатов с автоматическим подсчетом ссылок

Я прыгнул на подножку ARC. Раньше у меня были бы права на свойства делегата следующим образом:

@property(assign) id<MyProtocol> delegate;

Итак, я думал, что сделаю это под ARC:

@property(weak) id<MyProtocol> delegate;

Не так. В операторе @synthesize в .m у меня есть компиляция error:

* Семантический выпуск: существующий ivar 'delegate' для __weak property 'delegate' должен быть __weak *

Я объявил это слабым! Также как передать класс, реализующий протокол, в свойство с низкой ссылкой. Должен ли я обернуть его в один из этих странных вызовов obj_unretained?

Любая помощь по этому поводу была бы очень оценена.

4b9b3361

Ответ 1

"ivar" означает "переменная экземпляра", которую вы не указали. Я уверен, что это выглядит примерно так:

@interface Foo : NSObject {
    id delegate;
}

@property (weak) id delegate;

Что означает ошибка, так это то, что он должен выглядеть так:

@interface Foo : NSObject {
    __weak id delegate;
}

@property (weak) id delegate;

Если свойство утверждает, что оно слабое, ivar, в котором значение сохраняется, также должно быть слабым.