Ho cercato molte domande su accessors ObjC e accessors sintetizzati inutilmente. Questa domanda è più di una domanda "aiutami a risolvere un problema"; Non mi aspetto una risposta, ma sono piuttosto alla ricerca di esperti che valutino l'argomento.In Objective-C su iOS, qual è la differenza (stile) tra "self.foo" e "foo" quando si usano getter sintetizzati?
In una classe Cocoa Touch, vorrei scrivere qualche codice come questo (dove soundEffects
è una struttura NSArray sintetizzata):
id foo = [self.soundEffects objectAtIndex:1];
Un collega mi ha chiesto di spiegare il motivo per cui quanto sopra è meglio di questa linea:
id foo = [soundEffects objectAtIndex:1];
Bene, funzionalmente, non è diverso.
mie argomentazioni per l'ex sono come segue:
self.soundEffects
dice ogni altro coder lavorare sul codice che si tratta di un iVar, non una variabile ambito locale.Se fosse necessario, potremmo inserire la logica personalizzata nell'accessorio getter
soundEffects
.Per nessun motivo concreto, "sembra" la cosa giusta da fare dopo aver lavorato in Obj-C per un anno.
accetta argomenti # 1 e # 2 come valido, ma dà anche il contrappunto:
Non è questo solo codice di pesantezza?
Non si dovrebbe consentire a una classe di parlare direttamente con i propri iVars senza dover chiamare un metodo (il getter) su se stesso?
Chi prende?
I penso che self.soundEffects sia migliore perché altri oggetti possono sapere quando il valore cambia attraverso la codifica del valore-chiave, ma altrimenti non sanno che è cambiato ... –
Vuoi dire valore-chiave _observing_, b Ciò non avrebbe comunque effetto qui, @ Tom. '[self.myMutableArray addObject: anObject]' non notifica gli osservatori; solo 'setMyMutableArray:' fa. –
Ah sì, hai ragione su entrambi i fronti. Ma credo che sia passato un po 'di tempo! Il punto indica ancora alcuni usi in cui questa domanda potrebbe apparire, anche se non pertinente per l'esempio che ha usato. –