Domanda

Ho notato questo durante l'utilizzo di iOS6 beta 3

Quando creo una nuova sottoclasse di una UIViewContoller (nessun altro genitore classi di generare questo comportamento che ho notato), l' .m il file ora è vuoto, categoria alla parte superiore del file.In passato, quando l'apprendimento sulle categorie, ho notato che alcune persone utilizzare questa stessa tecnica per indicare i metodi privati (anche se non è veramente privato).

È che ciò che l'intento è qui?C'è stata qualche modifica per rendere le cose effettivamente privato ora?Ho notato che il @direttiva private là fuori troppo.

Qual è la tua persona, stile di codifica relative privato vars e metodi?

AGGIORNAMENTO:Dal momento che XCode è che ci spingono ad utilizzare la classe estensioni, sono andato avanti e li ha usati per i metodi privati/ivar per questo progetto.Ho trovato un inconveniente però.Ho visto che potrei riutilizzare uno dei miei sottoclasse UIViewControllers lungo con tutti i UIButtons, UILabels, ecc....Ho avuto questa eredità:UIViewController <- FirstViewController <- SecondViewController.

Beh, tutti i metodi privati che ho messo l'estensione della classe di FirstViewController non pop-up nella funzione di completamento automatico quando ho il codice in SecondViewController.Un leggero fastidio....

È stato utile?

Soluzione

Ti riferisci a questa definizione di interfaccia:

@interface MYViewController ()
@end

Questo è tecnicamente una estensione della classe, piuttosto che una categoria.Categorie dispone di una stringa all'interno delle parentesi.Classe estensioni vengono aggiunti alla classe in fase di compilazione, e può aggiungere ivars (di solito in forma di proprietà).Categorie vengono aggiunti in fase di esecuzione e non può aggiungere ivars.

Tutto ciò detto, il punto è corretto.Questo è utilizzato per definire i metodi privati e di proprietà.

In ObjC mondo "privato" è un "no trespassing" segno, non un rasoio a filo muro.Mentre c'è una @private le parole chiave che aggiunge compilatore di esecuzione), si applica solo a ivars, e in genere non è necessario.Questo tipo di avviso a base di privacy lavora molto bene in ObjC ed è più che sufficiente.

Mettere la vostra proprietà private a questa estensione di classe, e i chiamanti esterni si "potrebbe non rispondere al selettore" avvertenze se si tenta di accedere a loro (proprio come ottenere per la chiamata di un metodo non definito).Non si dovrebbe mai permettere avvisi di esistere in un ObjC progetto, in modo che questo impone l'incapsulamento dei dati.


MODIFICA

Se sono private, quindi non dovrebbe pop-up nella sottoclasse.Quello che vuoi è protetto.Non c'è nessun grande schema per i metodi protetti in ObjC, ma una tecnica comune è quello di metterli in una categoria .h file come MYViewController+Protetto.h.Trovo questo si presenta molto raramente, in pratica, dal momento che così tanto della buona ObjC design non sottoclasse.Utilizza la composizione e la delega, invece.

Per quanto riguarda "Perché solo visualizzare i controller." In primo luogo, non appena view controller.E ' solo visualizzare i controller su iOS (beh, VC, TableViewController, e GLKViewController).Su Mac, è anche la finestra controller e riflettori importatori.Cerca in:

.../Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates
.../Library/Xcode/Templates

Ma perché quelli?Beh, quelli sono tutti i controller, ed è molto comune per i controller bisogno di privata proprietà.Infatti, se non si dispone di proprietà privata in un controller, probabilmente stai facendo troppo pubblico.Non è così universale del modello e le classi di visualizzazione.Ho il sospetto che hanno giocato nella loro decisione.Potrebbe, inoltre, sono state diverse le persone che possedevano i modelli, o che sono stati aggiornati in tempi diversi.A volte si vedono poco le incoerenze che liscia nel tempo.

Potete fare i vostri propri modelli.Vedere La Creazione Di Custom Xcode 4 File Di Modelli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top