Domanda

in Objective C, se il utilizzando il getter e accedere direttamente al Ivar fare esattamente la stessa cosa, nessun codice lazy loading in getter, tutto ciò che fa è restituisce l'ivar, sarebbe ancora utilizzare la funzione di accesso o accedere direttamente al ivar poiché non v'è alcuna differenza? Perché?

EDIT:. Sto parlando all'interno della classe

È stato utile?

Soluzione 3

Ho deciso di usare sempre il [sé ivar], non direttamente Ivar, anche se io uso la notazione staffa objC standard, non la notazione del punto. Unica eccezione è se [sé Ivar] è una funzione di accesso lazy-carico e ho già usato nel metodo e so che è stato inizializzato e non voglio per verificare se è pari a zero i 10 più volte lo uso nel metodo.

Altri suggerimenti

C'è un piccolo vantaggio di prestazioni per essere goduto utilizzando direttamente l'ivar. Tuttavia, per evitare confusione, io di solito prefisso miei Ivars con _ sulla parte anteriore, e poi sintetizzare una struttura utilizzando @synthesize foo = _foo; il che significa che posso neanche fare [pippo auto] o _foo. E allora diventa più chiaro nel codice che mi riferisco a.

Tuttavia, il vantaggio non è molto, e alcuni potrebbero sostenere che questo è l'ottimizzazione prematura. Cosa utilizzando la proprietà (o metodo) vi darà è la capacità di evolvere la vostra classe successiva e cambiare l'Ivar ma mantenendo la proprietà dello stesso (ad esempio, che lo rende una proprietà calcolata). Essa consentirà inoltre sottoclassi di ignorare la vostra proprietà e funzionano ancora.

(A proposito, ci sono ancora alcuni casi in cui riferendosi alla sintassi proprietà può essere utile, come ad esempio durante la scrittura nel Ivar In questo caso, il supporto di proprietà per la copia |. Trattenere può essere utile per liberare l'oggetto precedente e ottenere la giusta sequenza di mantenere / release chiama)

Stai parlando di fuori della classe, o all'interno? Se non c'è, quindi si utilizza sempre la funzione di accesso. Prima di tutto, la visibilità predefinita per Ivars in objC è @protected, quindi a meno che non esplicitamente farli @public, sono di utilizzare una funzione di accesso. Oltre a questo, è possibile utilizzare la funzione di accesso perché non si sa mai se voi (o qualcun altro) potrebbe sottoclasse la classe e modificarlo basta che utilizzando la funzione di accesso è necessario.

Se si sta parlando all'interno della classe, non è sono di utilizzare la funzione di accesso, ma se si imposta valori @property, non c'è motivo di non utilizzare la notazione del punto, anche se si sta sintetizzando tutto. Se si utilizza la notazione standard objC, come ad esempio [myObject someVariable], poi ripetuto messaggi annidati possono ottenere difficile da leggere e ingombra.

In realtà, la funzione di accesso non è un grosso problema come il mutatore, perché mutatori spesso fanno più di una cosa. Con entrambe le getter (al di fuori della classe) e setter è una buona pratica.

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