Dai un avvertimento quando non viene chiamato

Quando non usi ARC, ricevi un avviso quando non chiami [super dealloc] nel tuo metodo dealloc.

Sto cercando di implementare qualcosa di simile con una class che viene sottoclassificata spesso per avvisare la persona che implementa la sottoclass quando non chiama super.

Qualche idea?

Le versioni recenti di llvm hanno aggiunto un attributo che indica che le sottoclassi devono chiamare super:

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

La compilazione di quanto sopra produce l’avviso:

 Method possibly missing a [super openDoor] call 

AGGIORNARE

Vedi la risposta di bbum per un modo diretto per dire al compilatore che i sottoclassi devono chiamare super .

ORIGINALE

Ciò che Apple generalmente fornisce è un hook, come viewDidLoad . Apple non fa alcun lavoro nella base -[UIViewController viewDidLoad] . È un metodo vuoto. Invece, Apple fa il suo lavoro altrove, in un metodo privato che non è autorizzato a eseguire l’override e chiama viewDidLoad con quel metodo. Quindi, anche se ti dimentichi di chiamare [super viewDidLoad] nella sottoclass UIViewController , tutto il lavoro di Apple viene comunque completato.

Forse puoi modificare la tua API per utilizzare uno schema simile.

 NS_REQUIRES_SUPER 

è l’espressione moderna per

 __attribute__((objc_requires_super))