@interface Foo()
crea un'estensione di classe (I stand corrected, props to bbum) sull'interfaccia Foo, che è come metodi aggiuntivi aggiunti all'interfaccia. Alcune persone usano anche @interafce Foo(Private)
(categoria) invece di un'estensione di classe con ()
. È più come "iniettare" nuovi metodi in una classe esterna alla classe.
L'inserimento di questo nel file .m non fa altro che "vederlo" nel file .h, ma il gioco è fatto. Fondamentalmente le persone usano normalmente le categorie o le estensioni di classe nei file .m per specificare le interfacce private, ma sono anche usate per cose come UIKit usa le categorie per aggiungere i metodi pubblici row
e section
a NSIndexPath. (Questo può essere fonte di confusione)
Non hai davvero bisogno di definire metodi privati in questo modo, ma se hai un metodo chiamato barra che chiama il metodo foo prima che foo sia definito nel file sorgente otterrai un compilatore avvertendo qualcosa come "l'oggetto stesso potrebbe non rispondere a foo". Puoi sbarazzartene definendo foo prima di definire la barra o qualsiasi altro codice di chiamata. È lo stesso con C semplice e funzioni.
Come Ole dice che questo non impedisce a nessuno di chiamare i metodi privati, dichiara semplicemente l'intenzione di essere privati e fa sì che il compilatore generi gli avvisi "potrebbe non rispondere" anche se importano il file .h .
EDIT
vedere anche http://www.friday.com/bbum/2009/09/11/class-extensions-explained/ qualche spiegazione delle categorie vs. estensioni di classe. Sembra che le estensioni di classe dovrebbero essere più corrette per la definizione di metodi privati, dal punto di vista di un avviso del compilatore, perché i metodi di categoria sono facoltativi. Vorrei che il mio libro avrebbe spiegato questo!
C'è un'enorme differenza tra named categories '(foo)' e un'estensione di classe '()'. – bbum
Avete un riferimento a questo? Non vedo nulla nel libro "Programming in Objective-C 2.0" su questo. Sembra che il nome della categoria sia facoltativo da tutto ciò che posso dire. Non che io sia un esperto o altro, ma sarebbe utile se potessi fornire un link che spieghi la differenza tra (Privato) e(). – Nimrod
non importa, ho trovato il tuo blog http://www.friday.com/bbum/2009/09/11/class-extensions-explained/ Mi chiedo perché il mio libro non parli di questo? – Nimrod