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?
- Jak obsługiwać funkcję zwracającą zmienną wskaźnika i jak wykonywać wiadomości za pomocą wskaźnika zwrotu?
4 answers
Zaktualizowana odpowiedź dla zmienionej dokumentacji
Informacje są teraz rozpowszechniane w kilku przewodnikach w dokumentacji. Oto lista lektur wymaganych:
- podstawowe kompetencje kakao: własność zadeklarowana
- Programowanie z Objective-C: Enkapsulowanie danych
- przejście do Arc Release Notes
- Advanced Memory Management Programming Guide
- Objective - C Runtime Programming Przewodnik: Deklarowane Właściwości
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).
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.
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"
)
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
-
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
-
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"
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