Проблема утечки памяти делегата Iphone - PullRequest
0 голосов
/ 23 декабря 2009

Мне нужна ваша помощь, я занят этим проектом.

Когда я запускаю приложение в Инструменты, → ← отмечается строка, дающая утечку памяти. При первом запуске все в порядке, но второй раз → ← помечена строка, указывающая на утечку памяти, я не понимаю, почему? Я пробовал много вещей, я использовал NSAutoReleasePool, но результат тот же. Может кто-нибудь помочь мне, пожалуйста? SBJSON * json = [[SBJSON alloc] init]; ошибка = ноль; → NSDictionary * results = [json objectWithString: ошибка ответа: & error]; ← [релиз JSON]; [ответный релиз]; NSArray * responsesedNetworks = [результаты objectForKey: @ "networks"]; NSMutableArray * serverResponse = [[NSMutableArray alloc] initWithArray: responsesedNetworks]; Редактировать: Я загрузил пример приложения по этому адресу: [удалено] [1] сейчас, я уверен, что источник проблемы не является делегатом, но я не знаю, где проблема, я уверен, что инструменты показывают неправильное место утечка памяти. Я много чего перепробовал, может кто-нибудь покажет мне мою ошибку?

Спасибо

Редактировать 2: Ребята К сожалению, я попробовал статический анализатор Clang, так как ожидал, что он даст пару предупреждений в какую-то строку кодов, я исправил эти предупреждения.

Теперь, инструменты дают ошибку утечки, но Кланг говорит, что в проекте нет ошибки.

Наконец, моя проблема не исчезла.

Пожалуйста, скачайте последний пример приложения, и вы сможете увидеть его здесь. ПРИМЕР Источник проекта .

Как увидеть эти утечки: Откройте проект и начните отладку на симуляторе (версия не имеет значения). Запустите отладку, в открывшемся первом окне вы увидите информационную кнопку в верхнем углу. Нажмите и откройте его, после этого закройте информационное окно и снова откройте его, в этот момент вы должны увидеть сообщения об утечке прибора. Но Clang ничего не дает, я имею в виду, что все хорошо на стороне Clang.

Я правда в замешательстве? что мне делать?

Ответы [ 2 ]

1 голос
/ 23 декабря 2009

Приборы не указывают линию, которая вызывает утечку. Это указывает на строку, которая распределила память, которая позже просочилась. Только из приведенного кода (который, очевидно, не весь код), я подозреваю, что вы просачиваете serverResponse, который включает в себя память, выделенную в отмеченной вами строке. Не просто смотрите на линию, которую дает вам Инструменты. Какой класс протекает? Это даст столько же подсказки, сколько строка.

Поскольку у вас начинаются проблемы с управлением памятью, советуем вам: когда вы что-то выпускаете, всегда устанавливайте ноль. Это избавит вас от головной боли и вылетит позже. В данном случае я говорю о json и response:

[json release];
json = nil;

Если у вас есть Snow Leopard и Xcode 3.2, запустите анализатор (Cmd-Shift-A). Он автоматически найдет наиболее распространенные проблемы с памятью.

0 голосов
/ 24 декабря 2009

Существует инструмент, который намного проще в использовании, чем инструменты. Инструментом является Clang Static Analyzer. На сайте описано, как установить и использовать набор инструментов. Это так просто в использовании и очень эффективно. Я использую это все время.

Команды:

xcodebuild clean
scan-build -k -V xcodebuild

Это действительно легко использовать, так как результаты появляются в веб-браузере! Это будет ловить утечки, которые не улавливают инструменты. Это инструмент, который Apple интегрировала в Snow Leopard ... он также доступен в Leopard. Проверьте веб-сайт для направления ..

Надеюсь, это поможет!

...