Kiedy klasa niestandardowa jest tworzona w Objective C, kiedy i jak wywoływana jest metoda ? Czy jest to coś, co muszę jakoś wdrożyć w mojej klasie?Kto dzwoni do metody dealloc i do celu C?
Odpowiedz
Nigdy nie wysyła się bezpośrednio wiadomości dealloc. Zamiast tego, metoda dealloc obiektu jest wywoływana pośrednio poprzez metodę protokołu NSObject (jeśli komunikat zwolnienia powoduje, że licznik zatrzymania odbiornika staje się 0). Więcej informacji na temat korzystania z tych metod można znaleźć w Przewodniku programowania zarządzania pamięcią.
podklasy musi wdrożyć własne wersje dealloc aby umożliwić uwolnienie dodatkowej pamięci zużywanej przez obiekt, taki jak dynamicznie przydzielonego przechowywania danych lub zmiennych instancji obiektów należących do dealokowane obiektu. Po przeprowadzeniu dealokacji specyficznej dla klasy, metoda podklasy powinna zawierać wersje superklasy dealloc poprzez komunikat do super:
Ważne: Należy zwrócić uwagę, że po zakończeniu aplikacji obiekty mogą nie otrzymać komunikatu dealloc , ponieważ pamięć procesu jest automatycznie usuwane przy wyjściu - jest bardziej wydajne po prostu, aby system operacyjny mógł wyczyścić zasoby, niż wywołać wszystkie metody zarządzania pamięcią . Z tego i innych powodów, nie powinien zarządzać ograniczonych zasobów w dealloc
- (void)release
{
_retainCount--;
if (_retainCount == 0) {
[self dealloc];
}
}
Środowisko wykonawcze zrobi to za ciebie, gdy obiekt nie jest już potrzebny (co również decyduje środowisko wykonawcze). Tylko upewnij się, że prawidłowo zachowujesz i zwalniasz. Nie wywołuj dealloc na innych obiektach.
dealloc
nazywa wskutek memory management. Gdy obiekt "retainCount" osiągnie 0, wiadomość dealloc jest automatycznie wysyłana do tego obiektu.
Nigdy nie należy wywoływać dealloc na obiektach, chyba że jest to połączenie z [super dealloc];
na końcu nadpisanej dealloc.
-(void)dealloc
{
[ivar release]; //Release any retained variables before super dealloc
[super dealloc]; //Only place in your code you should ever call dealloc
}
I według -[NSObject dealloc] discussion
nigdy wysłać wiadomość dealloc bezpośrednio. Zamiast tego metoda dealloc obiektu jest wywoływana pośrednio za pomocą metody protokołu NSObject (jeśli komunikat o zwolnieniu skutkuje uzyskaniem zliczenia odbiornika z wynikiem 0). Zobacz Memory Management Programming Guide dla więcej szczegółów na temat korzystania z tych metod.
Wyobraźmy sobie, że -release
jest realizowany w NSObject tak:
- (void)release
{
_retainCount--;
if (_retainCount == 0) {
[self dealloc]
}
}
Jestem pewien, że jest to trochę bardziej skomplikowane, ale odpowiedź na to pytanie jest to, że sam obiekt wezwie -dealloc
gdy jest jego licznik zatrzymania spada do zera. Jednak twoja niestandardowa klasa odziedziczy to zachowanie z NSObject. Nigdy nie będziesz musiał wywoływać - dealokować siebie w kodzie, który piszesz; zawsze będzie automatycznie, gdy obiekt zostanie prawidłowo zwolniony.
- 1. Skompiluj C# do celu-C
- 2. Kto będzie wywoływał główną metodę w celu c
- 3. Niestandardowe dealloc i ARC (Objective-C)
- 4. Deweloperzy C# do Celu C?
- 5. Składnia metody w celu-c
- 6. W jaki sposób Generatory Python wiedzą, kto dzwoni?
- 7. NSNotificationCenter dzwoni wiele razy
- 8. Przesłanianie metody variadic w celu-c
- 9. asp.net mvc 4 - Kto dzwoni _ViewStart.cshtml i jaka jest sekwencja kroków
- 10. jQuery JSONP nie dzwoni do oddzwaniacza
- 11. Ustawienia IBOlety do zera w dealloc
- 12. Kto kopiuje plik app.config do pliku app.exe.config?
- 13. Jak zaplanować wywołanie metody w celu C
- 14. Różnica między zwolnieniem i dealloc w Objective-C
- 15. Konwersja formatu daty do celu C
- 16. Wyjaśnienie odniesienia i metody wykonania StringBuilder celu
- 17. Twilio, Tropo - kto jeszcze do aplikacji SMS i głosowych?
- 18. Czy można przekonwertować NSString do zwykłego Celu kodu C
- 19. Słownik bez zliczania referencji w celu-c
- 20. Przewodnik kompasu do celu GPS
- 21. Odpowiednik PHP do metody C# string.IsNullOrEmpty?
- 22. Opis metody Objective-C (komentarze do opinii)
- 23. Przekazywanie typu "var" do metody w C#
- 24. Kategorie celu C: Czy mogę dodać właściwość dla metody, która nie należy do mojej kategorii?
- 25. Dodawanie metody rozszerzenia do klasy ciągów - C#
- 26. Jak przekazać podzbiór kolekcji do metody C#?
- 27. ARC: wysyłanie zera do obiektu nie wywołuje natychmiast jego dealloc
- 28. Jak udekorować metody Celu C za pomocą dokumentacji?
- 29. popviewcontroller nie dzwoni viewWillappear
- 30. Kto jest połączony na Socket w C
Mam nadzieję, że to ciało metody powinno znajdować się pod "zwolnieniem", a nie "zachować" – Saran
@saran, masz absolutną rację. Mój głupi błąd; dzięki za złapanie go. – Caleb
Naprawdę ładna odpowiedź.i dać odpowiedź powyżej, ale myślę, że twoja odpowiedź jest najlepsza w praktyczny sposób .. – PJR