Przesłałem stary kod do układu ARC z obiektywnym C (automatyczne liczenie odniesienia) i wygląda na to, że działa świetnie. Z wyjątkiem dość dużego, wysokiego poziomu obiektu, który nie jest zwolniony, gdy jest wyrzucony z mojego stosu nawigacyjnego, co sprawia, że wierzę, że mam cykl zatrzymania w miejscu, które ARC ukrył przede mną (a przynajmniej utrudniło to odnalezienie). Jaki jest najlepszy sposób na wyeliminowanie tego potencjalnego cyklu zatrzymania i/lub jaki jest dobry sposób na określenie przyczyny wycieku pamięci w ARC? Dzięki!Łukowe wykrywanie zatrzymania ARC
10
A
Odpowiedz
16
Najlepszym sposobem jest zwykle użycie the Leaks instrument in the Instruments app.
Co nowego w Instruments wideo z WWDC 2011 omawia użycie instrumentów znaleźć zachować cykli pod ARC, rozpoczynając około 38 minut w.
26
Właśnie przesiedli starszą aplikację do korzystania z ARC. Instrumenty nie wykazywały przecieków, ale alokacje nadal rosły. Zauważyłem, że patrząc na obiekty na żywo dla czegoś, co wiedziałem, że powinien zostać usunięty, udało mi się wyśledzić zatrzymania bez wydania. Oto podstawowe kroki:
- użyć narzędzia alokacje w instrumenty
- grać za pomocą aplikacji na chwilę (jeśli wiesz, co nie jest zwolniony, to idzie szybciej)
- Zmiany Statystyk do obiektów w pasku skoku Allocations
- Sortuj według kategorii i znaleźć nazwę klasy swojej niepublikowane obiektu
- znaleźć żywą instancji i kliknij małą strzałkę w prawo obok adresu pamięci
- teraz można zobaczyć historię re Górach i komunikaty dla obiektu
0
Powiązane problemy
- 1. Xcode 7: crash na punkcie zatrzymania zatrzymania
- 2. ARC lub nie na ARC iphone iOS5
- 3. Konwersja projektu non ARC na ARC
- 4. Jak przekonwertować projekt ARC na non-ARC?
- 5. Na animacji zatrzymania zatrzymania w ich odpowiedniej pozycji
- 6. Użycie zatrzymania w initWithCoder?
- 7. Zdarzenie zatrzymania naciśnięcia klawisza
- 8. Wybór listy zatrzymania?
- 9. Skrót do zatrzymania REPL?
- 10. Zestaw repliki zatrzymania MongoDB
- 11. logika zatrzymania zegarka
- 12. Wykonanie zatrzymania SAS
- 13. Czy JSONKit obsługuje ARC, czy jest widelec obsługujący ARC?
- 14. Jak włączyć ARC dla pliku w projekcie bez ARC?
- 15. Zarządzanie pamięcią C z blokami, ARC i nie-ARC
- 16. Konwersja nie-ARC do projektu ARC bez odtworzenia go?
- 17. iPhone jak anulować zatrzymania performSelector
- 18. Złomowanie - sposób zatrzymania przekierowania (302)
- 19. Obsługa zdarzenia zatrzymania/przeładowania kontenera
- 20. proces Tło Unix ZATRZYMANIA nienormalnie
- 21. rozmowa zatrzymania kółka myszy jquery
- 22. Dane podstawowe i cykle zatrzymania
- 23. Kod zatrzymania po okresie czasu
- 24. ARC i ASIHTTPRequest
- 25. Cluster inicjalizatory z ARC
- 26. Prawidłowe pomost dla ARC?
- 27. performSelector ARC ostrzeżenie
- 28. fałszywy va_list w ARC
- 29. Błąd ARC podczas kompilowania
- 30. realloc() i ARC
Looks jak znalazłem! Gdyby odwołanie do bloku było __unsafe_unretained; zmienił go na __weak __block dla loli i wygląda na to, że naprawił go. UWAGA: Instrumenty NIE ZNAJDOWAŁY TEGO i rzeczywiście nie oznaczyły tego jako potencjalnej sytuacji wycieku. Dzięki za sugestię! – Grimless
Ups, po kilku dodatkowych kopaniu, okazuje się, że wyciek wciąż jest w pobliżu. Ale przecieka tylko wtedy, gdy wciskam go na stos nawigacyjny ... Jeśli użyję opcji -init lub -initWithNibName: bundle :, a następnie nil to jest referencja, zwalnia poprawnie. W przeciwnym razie, kiedy popchnę to na stos nawigacyjny, a następnie go wyskoczę, nigdy nie zwolni. – Grimless