Mam następujący fragment kodu, którego używam do skalowania obrazów. To jest w pętli, która tworzy i drenuje pulę autorelease dla każdego przejścia. Ten kod działa dobrze w symulatorze w iOS5.0, w iOS4.3 na iPadzie lub symulatorze, ale na iOS5.0.1 na iPadzie1, po 50-60 przejściach, drawInRect zaczyna zużywać pamięć, która nigdy nie zostanie zwolniona. Dzwoniłem do tego z dodatkowego wątku, ale teraz przywołuję operacje skalowania głównego wątku.Wykrywanie wycieków pamięci Wyjątek na iOS5.0.1
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Czy robię coś nie tak, czy to jest błąd iOS5.0.1?
Aktualizacja: Próbowałem wielu testów. Udało mi się dowieść, że ten sam kod skompilowany z XCode 4.0 działa dobrze na tym samym iPadzie. Ten sam kod skompilowany z XCode 4.2.1 powoduje brak pamięci. Ta procedura skalowania jest wywoływana w wątku tła. Napisałem inną procedurę skalowania przy użyciu niższych poziomów podstawowych wywołań graficznych. Nie przecieka z XCode 4.0, ale przecieka w mojej aplikacji z XCode 4.2.1. Dokładnie to samo drzewo wywoływania i wywoływania w samodzielnym projekcie nie wydaje się przeciekać (dużo) pamięci na XCode 4.2.1. Czekam na wiadomość od Apple na ten temat. W międzyczasie potrzebuję używać XCode 4. Jedyny obraz instalacyjny, który mam, wymaga Snow Leopard, co oznacza, że używam mojej starszej maszyny z lat 5-tymi. Dzięki
Aktualizacja 1/2012 Wydaje się, że to zdarza się tylko wtedy, gdy aplikacja jest uruchomiona z poziomu XCode. Ten sam program uruchamiany na iPadzie nie wykazuje przecieku. Inna aplikacja o tej samej rutynie nie wykazuje przecieku.
Otworzyłem zgłoszenie błędu w firmie Apple i przesłałem im projekt, który powiela problem. Nie oczekuję, że zostanie to rozwiązane w najbliższym czasie, ale nie wydaje się tak wszechobecne, jak początkowo sądziłem.
Aktualizacja 6/2012 Aktualizacja 6/2012 Pomimo wysłania Apple minimalnego projektu, który powtarza problem, twierdzą oni, że nie są w stanie odtworzyć problemu i nie robią żadnych postępów.
Podobno zadaję trudne pytania z kilkoma odpowiedziami, które naprawdę rozwiązują problem. Takich jak ten. Naprawdę może to być kompilacja błędów w bibliotekach w XCode 4.2. Ten sam kod skompilowany z SDK dla iOS 4.2 nie wykazywał wycieku pamięci na iPadzie z systemem iOS5.0.1. – David
Czy znalazłeś rozwiązanie tego problemu? – vondip
Wystąpił wyciek tylko wtedy, gdy aplikacja została uruchomiona przez XCode. Po uruchomieniu normalnie na iPadzie, nie wyciekło. Użytkownicy zgłosili awarię, która brzmiała tak, jak to spowodowało, ale myślę, że nie mieli ze sobą związku. Zmarnowałem miesiąc paniki, próbując rozwiązać. Otworzyłem raport o błędzie, ale nigdy nie otrzymałem użytecznej odpowiedzi. Twierdzili, że nie są w stanie się rozmnażać, ale albo nie próbowali, albo nie rozumieli. Wysłałem banalny projekt, który wyraźnie zilustrował problem. – David