Esistono due nuovi attributi di gestione della memoria per le proprietà introdotte da ARC strong
e weak
.
A parte copy
, che è ovviamente qualcosa di completamente diverso, ci sono differenze tra strong
vs retain
e weak
vs assign
?
Da quanto ho capito, l'unica differenza qui è che weak
verrà assegnato nil
al puntatore, mentre assign
non lo farà, il che significa che il programma andrà in crash quando invio un messaggio al puntatore una volta rilasciato. Ma se lo uso weak
, questo non accadrà mai, perché il messaggio inviato a nil
non farà nulla.
Non conosco differenze tra strong
e retain
.
C'è qualche motivo per cui dovrei usare assign
e retain
in nuovi progetti, o sono il tipo di deprecato?
weak
e strong
) e 4 di qualificazione di durata variabile ( __strong
, __weak
, __unsafe_unretained
, __autoreleasing
). Vedi le note ARC di seguito.
assign
durante la compilazione con ARC era un errore. Ci sono molte risposte cancellate su questo. Sembra che sia stato modificato prima della versione finale. unsafe_unretained
è l'attributo preferito per molti di noi primi utenti. Per la prova che unsafe_unretained
è un attributo valido, guarda la "Programmazione con Objective-C" di Apple nella sezione "Incapsulamento dei dati" sotto il sottotitolo "Usa riferimenti non mantenuti non sicuri per alcune classi". Che dice: "Per una proprietà, questo significa usare l'attributo unsafe_unretained:"
strong
,weak
eunsafe_unretained
.