Istnieją dwa nowe atrybuty zarządzania pamięcią dla właściwości wprowadzonych przez ARC strong
i weak
.
Poza tym copy
, co jest oczywiście czymś zupełnie innym, czy są jakieś różnice między strong
vs retain
a weak
vs assign
?
Z mojego zrozumienia, jedyną różnicą jest to, że weak
przypisze nil
wskaźnik do wskaźnika, podczas gdy assign
nie, co oznacza, że program zawiesi się, gdy wyślę komunikat do wskaźnika po jego zwolnieniu. Ale jeśli użyję weak
, tak się nigdy nie stanie, ponieważ wiadomość wysłana do nil
nic nie zrobi.
Nie wiem o różnicach między strong
i retain
.
Czy jest jakiś powód, dla którego powinno się używać assign
i retain
w nowych projektach, lub są tego rodzaju są przestarzałe?
weak
a strong
) i 4 zmienne kwalifikatory żywotność ( __strong
, __weak
, __unsafe_unretained
, __autoreleasing
). Zobacz uwagi ARC poniżej.
assign
podczas kompilacji z ARC było błędem. Istnieje wiele usuniętych odpowiedzi na ten temat. Wygląda na to, że zostało zmienione przed ostatecznym wydaniem. unsafe_unretained
jest preferowanym atrybutem dla wielu z nas wczesnych użytkowników. Aby dowieść, że unsafe_unretained
jest to prawidłowy atrybut, zapoznaj się z „Programowaniem z celem C” firmy Apple w sekcji „Hermetyzowanie danych” pod podtytułem „Używaj niebezpiecznych bezpiecznych odwołań dla niektórych klas”. Co mówi: „W przypadku właściwości oznacza to użycie atrybutu unsafe_unretained:”
strong
,weak
iunsafe_unretained
.