У меня есть несколько подклассов 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));
Как ни странно, теперь все предупреждения об устаревании исчезли.
Одна вещь, которую я не пробовал, - это преобразовать подклассы для переопределения нового назначенного инициализатора и посмотреть, получают ли места в коде, которые используют эти ячейки, теперь предупреждение об устаревании от суперкласса.
Мне все еще странно, что после добавления устаревшего атрибута все предупреждений исчезли.
Есть идеи, почему это будет?