Istnieją dwa nowe atrybuty zarządzania pamięcią dla właściwości wprowadzonych przez ARC strongi weak.
Poza tym copy, co jest oczywiście czymś zupełnie innym, czy są jakieś różnice między strongvs retaina weakvs assign?
Z mojego zrozumienia, jedyną różnicą jest to, że weakprzypisze nilwskaźnik do wskaźnika, podczas gdy assignnie, 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 nilnic nie zrobi.
Nie wiem o różnicach między strongi retain.
Czy jest jakiś powód, dla którego powinno się używać assigni retainw nowych projektach, lub są tego rodzaju są przestarzałe?
weaka strong) i 4 zmienne kwalifikatory żywotność ( __strong, __weak, __unsafe_unretained, __autoreleasing). Zobacz uwagi ARC poniżej.
assignpodczas 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_unretainedjest preferowanym atrybutem dla wielu z nas wczesnych użytkowników. Aby dowieść, że unsafe_unretainedjest 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,weakiunsafe_unretained.