Утечки памяти Iphone "Device" - PullRequest
1 голос
/ 24 мая 2011

После запуска xcode-> run with tool -> leaks, после прохождения симулятора с помощью расчески с мелкими зубьями и (Simulator) Instruments -> leaks отображается НОЛЬ.Но когда я запускаю само устройство, я получаю список из примерно 100+ элементов:

Leaked Object   #   Address Size    Responsible Library Responsible Frame
GeneralBlock-64 9   < multiple >    576 UIKit   GetContextStack
GeneralBlock-16 7   < multiple >    112 WebCore WebThreadCurrentContext
UIControlTargetAction   5   < multiple >    160 UIKit   -[UIControl addTarget:action:forControlEvents:]
__NSArrayM  5   < multiple >    160 UIKit   -[UIControl addTarget:action:forControlEvents:]
UIButton    5   < multiple >    720 

Бла, Бла, Бла ..

Я где-то читал о ком-то, кто упоминал, чтоесли вы создаете какие-либо темы, они должны быть в главном потоке?(WTF? Это не имеет никакого смысла).

Да, мое приложение использует потоки, но только для визуализации UIAlertViews, и все они расположены между [pool autorelease] и [pool release], есть ноль неопубликованныхNSStrings, кнопки, виджеты.Все, что распределяется, копируется, сохраняется, освобождается.

Кто-нибудь знает об этом Теме, который получает pool'd, вызывая сумасшедшие утечки памяти?

Заранее спасибо!

**** 25 мая 2011 года (11:35 по японскому времени) ***********

Хорошо, думаю, мне удалось определить причину моей памятиГоре ... Это эти придурковатые "AutoRelease UITableViewCells" ... Они НЕ выпускаются достаточно своевременно, пока они не вызвали сбой моего приложения ... Я только что просмотрел API AppleTableViewCell и ничего не увиделоб определении, является ли «ТВ-ячейка» действительно «ИСПОЛЬЗУЕМОЙ».Потому что мое приложение будет содержать только 30 ячеек на странице, но эти ячейки автоматического высвобождения продолжали расти, пока я не получил предупреждение о нехватке памяти (124 ТВ-ячейки).Кто-нибудь...?Знаешь, как я могу БЕЗОПАСНО выпустить эти ...?-

Я пытался использовать обычный «Alloc» и выпускать те, которые выходят прямо из очереди, (так что я знаю, что по крайней мере хорошее число было выпущено, но, как и ожидалось,это не понравилось .. Так что мне интересно, если это возможно сделать что-то вроде в ViewDidUnload () для (ячейки в очереди) [освободить ячейку] и прокрутить всю очередь, чтобы убедиться, что они все были убиты (конечно,Я бы не использовал авто-релиз) Любые идеи, любые гуру IOS ..? Заранее спасибо! - ChinaSailor 40 секунд назад edit

Ответы [ 2 ]

2 голосов
/ 24 мая 2011

Вам нужно запустить инструменты с включенными зомби, чтобы ваши просочившиеся объекты были доступны для проверки после их утечки.

Недостаточно просто включить NSZombieEnabled в переменные среды.Вы также должны включить его в Instrument.Этот урок помог мне; Учебник по устранению утечек памяти с помощью XCode и инструментов .

1 голос
/ 24 мая 2011

Я где-то читал, что кто-то упоминал, что если вы создаете какие-либо темы, они должны быть в Главной теме? (WTF? Это не имеет никакого смысла).

false - вы можете создать поток из потока, отличного от основного потока. согласен, это не имеет смысла.

Да, мое приложение использует потоки, но только для рендеринга UIAlertViews, и все они расположены между [пулом авто-релиза] и [пулом выпуска], есть ноль неопубликованных строк NSS, кнопок, виджетов. Все, что распределяется, копируется, сохраняется, освобождается.

Кто-нибудь знает об этой теме, которая получает pool'd, вызывая сумасшедшие утечки памяти?

создает и манипулирует объектами UIKit в главном потоке. период.

удачи!

(хотя этот ответ не может быть точной причиной для всех / любых ваших проблем - это хороший кандидат и фатальный недостаток из приведенного описания)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...