Предупреждать, когда не вызывается
Когда вы не используете ARC, вы получаете предупреждение, когда не вызываете [super dealloc] в вашем методе dealloc.
Я пытаюсь реализовать что-то подобное с classом, который часто получает подclassы, чтобы предупредить человека, реализующего подclass, когда он не вызывает супер.
Есть идеи?
- Каков наилучший способ перетащить NSMutableArray?
- Как я могу добавить объекты CGPoint в NSArray простым способом?
- UIScrollView не прокручивается после обновления до iOS7 / xcode 5
- Не удалось добавить объекты в NSMutableArray в Objective C
- Что такое простой способ разбить NSArray с 4000+ объектами в нем на несколько массивов с 30 объектами каждый?
- Что делает флаг компоновщика -all_load?
- Получить значение RGB из пресетов UIColor
- API, чтобы определить, работает ли на iPhone или iPad
- глубокая изменчивая копия NSMutableDictionary
- К ARC или не к ARC? Каковы плюсы и минусы?
- Понимание подсчета ссылок с помощью Cocoa и Objective-C
- AVAudioPlayer не воспроизводит звук
- Странная проблема сравнения поплавков в объективе-C
В последних версиях 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))