2013-04-05 3 views
0

У меня есть подкласс UIWebView и используйте его в контроллере представления.dealloc получает вызов для управления

CViewController *controller = [[CViewController alloc] init]; 
self.webView = controller; 
[controller release]; 

Теперь на мой взгляд контроллер dealloc вызывается, и я называю [_webView release] но dealloc в моем UIWebView подкласс не получает никогда не вызывается и использование памяти поднять на каждый раз, когда я поставил один контроллер представления в стек и никогда не будет выпущен после появления в стеке. Также я вижу все свои окна в Safari Development Tools, поэтому их никогда не выпускают. Я проверяю keepCount (я знаю, что это не очень полезно), но он сказал мне после назначения моей собственности, что keepCount равен 3? (Собственность неатомная, сохраняется)

+0

https://discussions.apple.com/thread/2740404?start=0&tstart=0 – iPatel

+0

Я использую инструменты, и каждый раз, когда я перемещаюсь из своего табличного представления на этот контроллер, мои байты в реальном времени получают 300-500 кб в основном в CFData. И, насколько я вижу, после моего деаллока, на мой взгляд, контроллер получает имя, которое должно быть удержано в моем uiwebview, должно быть 0, поэтому его следует называть dealloc для этого класса. # – Sebastian

+0

Использовать ARC. Нет причин не делать этого, если вы по-прежнему не поддерживаете iOS 3 (что было бы ошибкой). –

ответ

1

retainCount из 3 - это красная сельдь; бесполезное отвлечение. http://www.whentouseretaincount.com и все такое.

Поскольку у вас есть сценарий повторной утечки, Heapshot analysis должен помочь точно определить, почему память торчит вокруг.

Однако, возможно, вам не нужно заходить так далеко. Если ваше приложение имеет только один интерфейс UIWebView, вам нужно просто настроить инструмент Allocations, чтобы отслеживать только живые объекты и отслеживать события сохранения/выпуска. При этом отфильтруйте список объектов в памяти до UIWebView и перейдите в список событий сохранения/выпуска, связанных с объектом. Там будут найдены дополнительные удержания.

Это, однако, может быть симптомом, а не причиной. Причиной может быть кэширование, которое произошло неправильно или может быть какой-то другой объект, который не будет правильно выпущен, который висит на веб-просмотре.

Смежные вопросы