Kilka pytań na temat automatycznego zliczania referencji w iOS5 SDK
Obecnie pracuję nad aplikacją na iPada. Rozwój rozpoczął się dla iOS 4.2 i jest obecnie kontynuowany (i myślę, że zostanie zakończony) dla iOS 4.3. Właśnie przeczytałem o ARC w iOS 5 i w zasadzie zrozumiałem, że nigdy nie będziemy musieli już zwalniać i zatrzymywać obiektów. Moje pytania to:
Czy jeśli zdecyduję się na aktualizację do iOS 5, muszę usunąć wszystkie
[myObject retain]
i[myObject release]
z mojego kodu?Jeśli opracuję nową aplikację na iOS 5 za pomocą ARC, czy będę musiał wdrożyć jakiś rodzaj kontroli "retro-kompatybilności"? czyli: czy będę musiał sprawdzić wersję iOS i odpowiednio wywołać zachowaj i zwolnij? Czy ARC jest dostępny dla wszystkich wersji iOS lub tylko dla iOS 5?
5 answers
Jeśli zdecyduję się na aktualizację do iOS 5, czy trzeba usunąć wszystkie [myobject retain] oraz [myObject release] oświadczenia z mój kod?
Tak, ale XCode 4.2 zawiera nowe narzędzie" Migrate to Objective-C ARC " (w menu Edycja->Refactor), które robi to za Ciebie. Wezwanie dealloca to inna historia. Jak wspomniano w komentarzach, clang reference stwierdza, że należy zachować metodę dealloc:
uzasadnienie: mimo że ARC niszczy instancję zmienne automatycznie, nadal istnieją uzasadnione powody, aby napisać metodę dealloc, takie jak uwolnienie zasobów nieosiągalnych. Brak wywołania [super dealloc] w takiej metodzie jest prawie zawsze błędem.
Włączasz ARC używając nowego-fobjc-arc flaga kompilatora. ARC jest obsługiwany w Xcode 4.2 Dla Mac OS X v10. 6 i v10. 7 (Aplikacje 64-bitowe) oraz dla iOS 4 i iOS 5. (Słabe odniesienia nie są obsługiwane w systemie Mac OS X v10. 6 i iOS 4). Nie ma wsparcia ARC w Xcode 4.1.
-
Jeśli opracuję nową aplikację na iOS 5 za pomocą ARC, czy będę musiał wdrożyć jakieś coś w rodzaju" retro-kompatybilności"? Czyli: czy muszę sprawdzić wersję iOS i call odpowiednio? Więc, w zasadzie, jest ARC dostępne dla wszystkich wersji iOS lub po prostu dla iOS 5?
Nie, ponieważ ARC robi swoją magię w czasie kompilacji, a nie w czasie uruchamiania.
Zamiast pamiętać, kiedy do użycia zatrzymać, zwolnić i autorelease, ARC ocenia wymagania dotyczące żywotności Twoich obiektów i automatycznie wstawia odpowiednia metoda wzywa do Ciebie na czas kompilacji. Kompilator również generuje odpowiednie metody dealloc dla Ciebie.
Dalsze informacje o ARC: http://clang.llvm.org/docs/AutomaticReferenceCounting.html
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
2012-04-05 13:01:46
P1: nie, jeśli masz istniejący kod, możesz go używać tak, jak to jest z -fno-objc-arc możesz selektywnie wyłączyć ARC na dowolnym pliku.
Jeśli chcesz wyłączyć ARC na wielu plikach :
- wybierz żądane pliki w fazie docelowej / kompilacji / kompilacji źródeł w Xcode
- NACIŚNIJ ENTER . (podwójne kliknięcie zaznacza tylko jeden plik)
- Type - fno-objc-arc
- naciśnij Enter lub zrobione
Q2: nie, target może być tak niski jak iOS 4.0
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
2012-05-02 07:50:19
O ile Rozumiem i o ile mój iPhone/iPod z systemem iOS 5 i ios 4.3 działają, to wszystko jest całkiem automatyczne. Aplikacja zacząłem dla 4.0 i "zaktualizowane" do pracy z Xcode dla iOS 5.0 nigdy nie rzuca żadnego rodzaju ostrzeżenie mój sposób o zwolnieniu i utrzymanie, nawet jeśli to jest na każdym dealloc, itp. Jednak część tego samego kodu, który wstawiłem (skopiowałem plik) do nowego projektu stworzonego{[2] } z Xcode dla iOS 5 ma wiele, wiele ostrzeżeń. Więc wygląda na to, że nie musisz usuń wszystkie te połączenia i nie, w jakiś sposób dostosowuje je automatycznie do starszych wersji. Profilując mojego iPoda, nie widzę wycieków pamięci ani innych oznak awarii deallocs/releasing. Czy to pomaga?
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
2011-06-16 07:47:46
Odnośnie tej części twojego pytania
Jeśli opracuję nową aplikację na iOS 5 za pomocą ARC, czy będę musiał wdrożyć jakieś kontrole zgodności wstecznej? Czyli: czy muszę sprawdzić wersja iOS i wywołanie zachowują i zwalniają odpowiednio? Więc, zasadniczo, czy ARC jest dostępny dla wszystkich wersji iOS lub tylko dla iOS 5?
Należy zauważyć, że kompilator iOS 5 przyjmuje "Retro-kompatybilność" (w rzeczywistości dodaje kod, aby zachować / zwolnić pracę, zasadniczo), ale jeśli nie kompilujesz dla iOS 5.0, nie możesz użyć weak
jako słowa kluczowego. Zamiast tego używasz assign
. To niefortunne: weak
to ogromna zaleta (żadnych zwisających wskaźników, nigdy!). Zobacz moje pytanie tutaj do dyskusji na temat weak
, assign
i Łuk.
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
2017-05-23 12:07:25
Jeśli możesz wyłączyć ARC nie używając flagi kompilatora new-fobjc-arc, to nie jesteś zmuszony do ponownego pisania kodu idącego do przodu - chyba (?)
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
2011-11-07 09:47:19