2010-05-07 17 views
6

L'uso di "sé" è mai necessario in Objective-C o forse solo una buona pratica? Sono andato dal usarlo tutto il tempo a non usarlo affatto e non sembra davvero notare alcuna differenza. Non è solo sottinteso comunque?Il "sé" è necessario?

+0

Vuoi dire passando da 'self.property = value' a solo 'property = value'? – JBRWilkinson

risposta

5

self è necessario se si desidera per un oggetto per inviare messaggi a, beh, self. È anche utile occasionalmente accedere alle proprietà tramite getter/setter, nel qual caso è necessario utilizzare anche self, come in self.propertyname o self.propertyname = value. (Questi non sono equivalenti a propertyname o propertyname = value.

+0

Cosa succede se utilizzo la notazione dei messaggi piuttosto che la notazione dei punti? Importa? – Rob

+0

No. Ha ancora bisogno di sé. –

+0

risposta davvero CHIARA, perché in molti tutorial in rete tutti dicono che sono le stesse cose, grazie per la risposta – gbk

3

Non è necessario quando si fa riferimento a variabili di istanza. E 'necessario quando si vuole passare un riferimento dell'oggetto corrente ad un altro metodo, come quando si imposta un delegato:

[someObj setDelegate:self]; 

E' necessario anche quando si chiama un metodo nella stessa classe sull'oggetto corrente:

[self doMethod] 
+2

Quando si assegna alla variabile di istanza, è necessario utilizzare se stesso se si sta facendo affidamento sul setter per fare copia o conservare. –

0

Sì, perché Objective C non ha metodo chiama come il C/C++, ma utilizza l'invio del messaggio, l'auto per in contesti come

[auto doSomething]; e self.myProperty;

sono necessari.

Se si accede a un ivar, non è necessario l'auto.

Spero che questo aiuti.

-CV

1

Per la gestione delle variabili dipende. Se si desidera utilizzare un getter o un setter sintetizzato, utilizzare la notazione dot con self.

self.someProperty = @"blah"; //Uses the setter 
someProperty = @"blah"; //Directly sets the variable 
+0

Si noti che non è necessario utilizzare la notazione a punti. Ma a molti di noi piace. Ti avverto comunque: la notazione a punti sembra quasi che tu stia accedendo a un campo da una struttura non puntatore, invece di inviare un messaggio a un oggetto. Poiché gli oggetti Objective-C sono puntatori alle structs, 'self.someiVar = @" questo "' non può accedere a una variabile di istanza; useresti 'self-> someiVar = @" this "' (il bit 'self->' non è necessario all'interno dell'implementazione di una classe). Quindi, usa la notazione a punti se capisci cosa stai facendo e cosa non stai facendo. –

1

actualy non è necessario ogni volta, ma è una buona pratica, perché rende più facile per le altre persone a leggere il codice.

ed è necessario quando si dispone di oggetti con lo stesso nome in classi diverse, quindi il keywork "sé" dirà il software che si fa riferimento l'oggetto in quella stessa classe.

che di solito happends in progetti più grandi.