Zaktualizowana odpowiedź na zmienioną dokumentację
Informacje są teraz rozmieszczone w kilku przewodnikach w dokumentacji. Oto lista wymaganych lektur:
Odpowiedź na to pytanie zależy teraz całkowicie od tego, czy używasz aplikacji zarządzanej przez ARC (współczesne domyślne ustawienie dla nowych projektów), czy też wymuszasz ręczne zarządzanie pamięcią.
Assign vs. Weak - użyj przypisania, aby ustawić wskaźnik właściwości na adres obiektu bez zachowywania go lub w inny sposób kurowania; użyj słabego, aby właściwość wskazywała na zero automatycznie, jeśli przypisany do niej obiekt zostanie cofnięty. W większości przypadków będziesz chciał użyć słabego, aby nie próbować uzyskać dostępu do zwolnionego obiektu (nielegalny dostęp do adresu pamięci - „ EXC_BAD_ACCESS
”), jeśli nie wykonasz właściwego czyszczenia.
Zachowaj a kopiuj - zadeklarowane właściwości używają zachowywania domyślnie (więc można je po prostu całkowicie pominąć) i automatycznie zarządzają liczbą odwołań do obiektu, niezależnie od tego, czy inny obiekt jest przypisany do właściwości, czy jest ustawiony na zero; Użyj kopii, aby automatycznie wysłać nowo przypisanemu obiektowi -copy
wiadomość (która utworzy kopię przekazanego obiektu i zamiast tego przypisze tę kopię do właściwości - przydatne (nawet wymagane) w niektórych sytuacjach, gdy przypisany obiekt może zostać zmodyfikowany po ustawieniu jako właściwość innego obiektu (co oznaczałoby, że modyfikacja / mutacja dotyczyłaby również tej właściwości).
Programowanie Memory Management Guide z Biblioteki Reference iOS ma podstaw assign, skopiować i zachować z analogii i przykładów.
źródło
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"First",@"Second", nil]; NSMutableArray *copiedArray = [array mutableCopy]; NSMutableArray *retainedArray = [array retain]; [retainedArray addObject:@"Retained Third"]; [copiedArray addObject:@"Copied Third"]; NSLog(@"array = %@",array); NSLog(@"Retained Array = %@",retainedArray); NSLog(@"Copied Array = %@",copiedArray); array = ( First, Second, "Retained Third" ) Retained Array = ( First, Second, "Retained Third" ) Copied Array = ( First, Second, "Copied Third" )
źródło
przydzielać
Kopiuj:
zachować:
źródło