Cel C-Przypisywanie, Kopiowanie, Zachowywanie

Jestem nowy w Objective C. mam podstawową wiedzę w C, w tym pojęcie wskaźników. Mam dwa podstawowe pytania:

    Czy ktoś może wyjaśnić różnicę między przypisaniem, kopiowaniem i zachowywaniem za pomocą jakiejś analogii?
  1. Jak obsługiwać funkcję zwracającą zmienną wskaźnika i jak wykonywać wiadomości za pomocą wskaźnika zwrotu?
Author: Rajesh, 2010-12-22

4 answers

Zaktualizowana odpowiedź dla zmienionej dokumentacji

Informacje są teraz rozpowszechniane w kilku przewodnikach w dokumentacji. Oto lista lektur wymaganych:

Odpowiedź na to pytanie zależy teraz całkowicie od tego, czy używasz aplikacji zarządzanej przez ARC (nowoczesna domyślna dla nowych projektów), czy wymuszasz ręczne zarządzanie pamięcią.

Assign vs. Weak - Użyj assign , Aby ustawić wskaźnik właściwości na adres obiektu bez zatrzymywania go lub innego kuratorowania go; użyj weak, Aby właściwość wskazywała na nil automatycznie, jeśli przypisany do niej obiekt jest dealokowane. W większości przypadków będziesz chciał użyć słabego , aby nie próbować uzyskać dostępu do dealokowanego obiektu (nielegalny dostęp do adresu pamięci - "EXC_BAD_ACCESS"), jeśli nie wykonasz prawidłowego czyszczenia.

Retain vs. Copy - zadeklarowane właściwości użyj zachowaj domyślnie (możesz to po prostu pominąć) i automatycznie będzie zarządzać liczbą referencji obiektu, czy inny obiekt jest przypisany do właściwości, czy jest ustawiony na nil; Użyj copy, Aby automatycznie wysłać nowo przypisany obiekt A -copy wiadomość (która utworzy kopię przekazanego obiektu i 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 miałaby zastosowanie również do właściwości).

 114
Author: Joshua Nozzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-19 17:35:52

Podręcznik programowania zarządzania pamięcią z biblioteki referencyjnej iOS zawiera podstawy przypisywania, kopiowania i przechowywania za pomocą analogii i przykładów.

Kopia Tworzy kopię obiektu i zwraca go z liczbą zatrzymań równą 1. Jeśli kopiujesz obiekt, jesteś jego właścicielem. Dotyczy to każdej metody, która zawiera słowo copy, gdzie "copy" odnosi się do zwracanego obiektu.

Retain zwiększa liczbę zatrzymań obiektu o 1. Bierze własność obiekt.

Release zmniejsza liczbę zatrzymanych obiektów o 1. / Align = "left" / własność obiektu.

 31
Author: Larry Hipp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-22 15:59:34
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"
)
 5
Author: srivas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-25 20:00:26
  1. Przypisać

    • assign jest domyślnym atrybutem właściwości
    • assign jest atrybutem właściwości mówi kompilatorowi, jak zsyntetyzować implementację settera właściwości
  2. Kopia:

    • kopia jest wymagana, gdy obiekt jest zmienny
    • copy zwraca obiekt, który musisz jawnie zwolnić (np. w dealloc) w środowiskach bez śmieci
    • Musisz zwolnić obiekt po jego zakończeniu, ponieważ jesteś zachowanie kopii
    • Określa, że nowa wartość powinna zostać wysłana "- retain "przy przypisaniu, a Stara wartość wysłana "- release"
    • jeśli napiszesz zachowaj to będzie auto działało jak strong
    • metody takie jak "alloc" zawierają implicit "retain"
 4
Author: Chen Rui,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-26 07:01:27