2011-10-21 1 views
6

Ho letto la transizione alle note ARC e ho ancora un po 'di confusione sugli attributi delle proprietà che possiamo utilizzare ... Possiamo usare il weak al posto di assign (con il vantaggio che la proprietà è impostata su zero se l'oggetto a cui punta viene rilasciato), al posto di retain e in sostituzione della copia? Usiamo ancora la copia da soli o abbiamo bisogno di accoppiare forte con copia, come ad esempio property (strong,copy) .. Forse ho bisogno di praticare e leggere di nuovo il documento perché ARC non è molto chiaro per me ...Nuovi attributi delle proprietà ARC

risposta

11

Il Clang ARC documentation ha questo da dire:

copia implica __strong proprietà, così come il solito comportamento della semantica di copia sul setter.

Per quanto riguarda i metodi setter personalizzato, ha questo da dire:

proprietà specificata di una struttura è conservato nella sua metadati, ma altrimenti il ​​significato è puramente convenzionale a meno che la proprietà è sintetizzato.

Quindi, se implementi i setter personalizzati, sei responsabile dell'implementazione della semantica forte o debole in questi setter.

+0

Non capisco davvero come si possa implementare una semantica forte e debole, dal momento che non si usa il retain/release come nei setter delle proprietà mantenute –

+2

Il setter dovrebbe infine archiviare l'oggetto puntatore in una variabile qualificata con "__strong" o "__weak". Tuttavia, potrebbe fare anche altre cose, come eseguire "[self setNeedsDisplay]". –

+0

Quindi stai dicendo che l'ivar che memorizzerà la variabile impostata dal setter dovrebbe essere dichiarato come __strong o __weak? –

2

La copia è implicitamente forte, perché crea una copia e trasferisce la proprietà.

Vai a questa documentazione:

http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW18

+0

Possiamo ancora implementare i metodi di settaggio per proprietà deboli e forti? Con le proprietà mantenute hai implementato i metodi setter rilasciando il precedente obj e mantenendo l'obj passato al setter .. Cosa fai in un metodo di settaggio proprietà forte, dal momento che non devi più usare retain e release ... Come dovrebbe essere debole e l'implementazione dei setter delle proprietà forti differisce con l'arco, se hai scelto di implementarli? Forse la differenza è il corrispondente ivar che deve essere debole o forte? Scusami se le mie domande sono banali ... –