2013-03-25 18 views
16

Se dichiaro una proprietà come questa:Qual è il modo corretto per creare un setter personalizzato per una proprietà debole nell'obiettivo C?

@property(nonatomic,weak) Foo *someProperty; 

e ho poi dichiarare un setter personalizzato in questo modo:

- (void)setSomeProperty:(Foo *)someProp { 
    _someProperty = someProp; 
    //...more custom stuff 
} 

c'è qualcosa di sbagliato in questo? Cioè, il compilatore dovrebbe sintetizzare automaticamente _someProperty ivar con il modificatore __weak, quindi è sufficiente eseguire l'assegnazione nel setter qui sopra, corretto?

risposta

13

Sì, questo è tutto quello che c'è da fare. Naturalmente puoi specificare un iVar personalizzato se desideri qualcosa di diverso da _someProperty del tipo:

@synthesize someProperty = someProperty_; 
+0

+1 abbastanza semplice. –

+0

Grazie mille! Quindi, a quanto ho capito, se stai scrivendo un setter personalizzato in ARC, l'unica volta che devi preoccuparti di "sovrascrivere" gli attributi nella dichiarazione di proprietà è se hai la proprietà dichiarata con atomico (nel qual caso avresti bisogno per @synchronize attorno all'impostazione di iVar) e copia (nel qual caso l'asserzione di assegnazione sarà simile a _someProperty = [someProp copy];) – adevine

Problemi correlati