__deprecated__ не вызывает предупреждение компилятора с подклассом - PullRequest
1 голос
/ 25 января 2010

У меня есть несколько подклассов UITableViewCell из 2.0 дней, которые переопределяют устаревший назначенный инициализатор:

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier

Этот код выполняет некоторые дополнительные настройки для ячейки, и я преобразовываю классы для использования нового назначенного инициализатора:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

Странно только то, что место, в котором компилятор выдает предупреждение о том, что метод устарел, находится в самих подклассах, когда они вызывают

[super initWithStyle:style reuseIdentifier:reuseIdentifier]

Все классы, которые используют эти подклассы, не получают предупреждение. Чтобы попытаться форсировать это, я добавил следующее в заголовки подклассов:

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier __attribute__ ((deprecated));

Как ни странно, теперь все предупреждения об устаревании исчезли.

Одна вещь, которую я не пробовал, - это преобразовать подклассы для переопределения нового назначенного инициализатора и посмотреть, получают ли места в коде, которые используют эти ячейки, теперь предупреждение об устаревании от суперкласса.

Мне все еще странно, что после добавления устаревшего атрибута все предупреждений исчезли.

Есть идеи, почему это будет?

1 Ответ

1 голос
/ 26 января 2010

Я полагаю, что проблема в том, что +alloc возвращает объект типа id, поэтому компилятор не уверен, что ваш -initWithFrame:reuseIdentifier: на самом деле тот же метод, что и устаревший. Однако, когда вы вызываете [super initWithFrame:reuseIdentifier:], компилятор точно знает, что метод устарел. Если вы попробуете что-то вроде [(MyTableCellClass *)[MyTableCellClass alloc] initWithFrame:frame reuseIdentifier:ident], я ожидаю, что это предупредит.

Хотя это на самом деле не объясняет, почему все предупреждения исчезают, когда вы сами переименовываете метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...