Утечки памяти iPhone в коде Apple - PullRequest
2 голосов
/ 07 октября 2009

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

Например:

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

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

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

Ответы [ 5 ]

5 голосов
/ 07 октября 2009

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

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

4 голосов
/ 07 октября 2009

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

2 голосов
/ 25 ноября 2009

Я думаю, что здесь ваша утечка связана:

operation.urlConnection = connection;

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

0 голосов
/ 07 октября 2009

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

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

0 голосов
/ 07 октября 2009

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

...