2012-04-04 15 views
6

Ho notato che nella demo della calcolatrice del corso Stanford CS193p, la connessione IBOutlet è stata trascinata dall'etichetta al file di intestazione. Tuttavia, la connessione IBAction è stata creata direttamente nel file .m. Ho provato a leggere la documentazione e ho cercato su Google, ma non ho trovato il motivo alla base di questo.IOS CS193p - Perché la connessione IBAction è stata trascinata nel file .m e non in .h?

Direi che il metodo digitPressed di IBAction dovrebbe essere dichiarato anche nel file di intestazione (non dovrebbe essere parte dell'interfaccia?).

Sono ovviamente abbastanza nuovo all'Objective C (per lo più lavorato in Java) quindi sono sicuro che mi manca qualcosa di base.

Qualcuno può spiegare per favore?

risposta

8

Dichiarare le cose nel file di intestazione di una classe le rende parte dell'interfaccia pubblica. Ciò include le prese e le azioni definite su un controller di visualizzazione.

Se qualcosa deve essere reso pubblico è una domanda di design. Un buon principio è: solo se deve essere. Con le prese e le azioni di ViewController, il più delle volte, non è necessario - e quindi non dovrebbe essere - pubblico.

Ciò che di solito accade è che si fanno delle ipotesi su ciò che l'interfaccia pubblica dovrebbe contenere, quindi (se sei uno sviluppatore ordinato) dai un'occhiata di nuovo quando l'implementazione è matura e rimuovi qualsiasi cosa inessenziale.

+3

Essere in grado di dichiarare gli IBOutlet nel file .m e collegarli in IB è abbastanza nuovo. Demo e tutorial non sono stati tutti raggiunti. È sicuramente la soluzione migliore ed evita pratiche molto negative come la modifica di IBOutlet di un altro oggetto (cosa che non si dovrebbe mai fare). –

+0

@danh, puoi spiegare perché le prese e le azioni non devono essere pubbliche? Come fa la View ad accedere a questi nel controller se questi non sono pubblici? – Rahul

+1

ViewController può essere un nome confuso se ti è stato insegnato in MVC. Non è, come si potrebbe pensare, un abbinamento di due coetanei in quell'acronimo. È meglio pensarlo come la cosa che controlla una vista. In questo senso, ha più senso mantenere la propria visione privata. Questa non è una regola, o corso, solo una pratica comune. View è una proprietà del controller di visualizzazione e le sottoclassi create spesso hanno subviews aggiuntivi che controllano. Questo controllo è solitamente abbastanza assoluto, in quanto non condividono tale controllo con gli altri. Lasciatemi un po 'di google per un buon riferimento, e lo posterò qui. – danh

Problemi correlati