2009-10-07 5 views
2

У меня протечки через инструменты в приложении для iPhone, и я вижу много утечек, которые, похоже, не поступают из моего кода.Утечка памяти iPhone в коде Apple

Например:

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request 
                   delegate:operation]; 
operation.urlConnection = connection; 
[connection release]; 

Утечки говорит мне, что первая линия протекает 1008 байт. Кажется, это довольно стандартная инициатива alloc с выпуском. Другие утечки, упомянутые в UIKit и WebKit.

Возможно ли, что эти утечки на самом деле находятся в каркасах Apple или, скорее всего, мой код и утечки не отображают информацию точно?

ответ

5

Вполне возможно, что в инфраструктуре Apple есть течи (как бы маловероятно это ни показалось) - в версии Core Data для iPhone в выпуске 3.0 GM было несколько вариантов реализации Core Data.

Что вы должны делать, когда подозреваете, что такая вещь пытается найти образец проекта от Apple, который использует возможности, которые вы ищете или уменьшаете свой собственный код, насколько это возможно (возможно, создайте минимальный побочный проект), затем проверьте это с помощью инструментов. Если вы можете надежно воспроизвести утечку, отправьте ошибку Apple.

+0

Спасибо, я попробую. – Brian

0

Кроме того, вы пытались протестировать приложение на устройстве вместо симулятора? Бегущие инструменты на тренажере не очень точные и надежные. Попробуйте это также http://www.tuaw.com/2009/09/08/xcode-3-2-daily-tip-analyzing-your-code/

+0

Я использую статический анализатор. Он ничего не говорит об этих утечках. Можете ли вы запустить утечку на устройстве. Если так, я не знаю, как это сделать. – Brian

+0

Nevermind - Я работал. Благодарю. – Brian

0

Вы сохраняете ссылку на свой объект-делегат где-нибудь еще?

Если вы думаете об этом, утечки предполагают, что делегат является утечкой, если у вас нет других ссылок на него, но он по-прежнему сохраняется. Кроме того, как вы освобождаете делегата (named operation), когда запрос выполняется?

+0

Я не думал, что часть делегата является утечкой. Я не слишком хорошо знаком с утечками, поэтому я подумал, что это увидит. Я не понимал, что это зависит от подсчета ссылок. Этот код создается из проекта WSDL2OBJC. Мне нужно будет изучить его еще. Благодарю. – Brian

4

Ты работаешь с NSZombieEnabled? Это приведет к появлению ложных «утечек» в «Инструменты».

+0

Да, я ... не знал об этом. Благодарю. – Brian

2

Я думаю, что это где стебли ваша утечки:

operation.urlConnection = connection; 

Вы не можете делать надлежащее управление памятью в operation.

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