Предупреждать, когда не вызывается

Когда вы не используете ARC, вы получаете предупреждение, когда не вызываете [super dealloc] в вашем методе dealloc.

Я пытаюсь реализовать что-то подобное с classом, который часто получает подclassы, чтобы предупредить человека, реализующего подclass, когда он не вызывает супер.

Есть идеи?

В последних версиях llvm добавлен атрибут, который указывает, что подclassы должны вызывать супер:

@interface Barn:NSObject - (void)openDoor NS_REQUIRES_SUPER; @end @implementation Barn - (void) openDoor { ; } @end @interface HorseBarn:Barn @end @implementation HorseBarn - (void) openDoor { ; } @end 

При компиляции выше выдается предупреждение:

 Method possibly missing a [super openDoor] call 

ОБНОВИТЬ

См . Ответ bbum для прямого способа сообщить компилятору, что подclassы должны называть super .

ОРИГИНАЛ

То, что Apple делает, как правило, заключается в предоставлении крючка, например viewDidLoad . Apple не делает никакой работы в базе -[UIViewController viewDidLoad] . Это пустой метод. Вместо этого Apple выполняет свою работу в другом месте, в частном методе, который вам нельзя переопределить, и вызывает ваш viewDidLoad из этого метода. Поэтому, даже если вы забудете назвать [super viewDidLoad] в вашем подclassе UIViewController , все работы Apple все равно будут выполнены.

Возможно, вы можете пересмотреть свой API для использования аналогичного шаблона.

 NS_REQUIRES_SUPER 

является современным выражением для

 __attribute__((objc_requires_super)) 
  • Как использовать UIPanGestureRecognizer для перемещения объекта? iPhone / IPad
  • Должен ли я использовать NSUserDefaults или plist для хранения данных?
  • Звук не работает в iPhone Simulator?
  • Как использовать первый символ в качестве имени раздела
  • Как resize изображения программно в объективе-c в iphone
  • Как использовать VideoToolbox для распаковки видеоstreamа H.264
  • Как написать данные в plist?
  • Как кодировать Base64 на iPhone
  • Как сделать ImageView UITableViewCell фиксированным, даже когда изображение меньше
  • Преобразование NSArray в NSDictionary
  • Что такое двойная звезда (например, NSError **)?
  • Interesting Posts

    Что означают цвета в htop?

    Можно ли вызвать функцию C из C # .Net

    Maven: как переопределить зависимость, добавленную библиотекой

    Прокрутка в терминале (OS X) при запуске tail -f и ssh-ed в машину дает некоторые странные символы

    Где Chrome сохраняет закладки в Windows?

    Вставка изображений автоматически, используя их пути к файлам в тексте

    Как подмножество кадра данных в фактор и повторить график для каждого подмножества?

    Google Chrome автоматически выполняет предварительный поиск при загрузке google.com

    как проверить Wi-Fi или 3g-сеть доступна на Android-устройстве

    Дом Maven (M2_HOME) не подхвачен IntelliJ IDEA

    Сделать муравей тихий без флага -q?

    Как я могу создать jQuery UI ‘draggable ()’ div, перетаскиваемый для сенсорного экрана?

    GlobalConfiguration.Configure () не отображается после переноса Web API 2 и .NET 4.5.1

    Get-Aduser -Filter не принимает переменную

    Как импортировать несколько рабочих листов из одного файла Excel в документ Microsoft Word в качестве связанных и обновляемых объектов?

    Давайте будем гением компьютера.