2009-12-23 2 views
0

Мне нужна ваша помощь, я уложен в этот проект.Проблема с утечкой памяти делегата Iphone

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

Спасибо вы

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

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

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

Пожалуйста, загрузите последний пример приложения, и вы можете видеть своими глазами. Вот EXAMPLE Project source.

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

Я действительно смущен? что мне делать ?

+0

Какой у вас объект? –

+0

Если я знаю, я их исправлю :) – fyasar

+0

Инструменты расскажут вам, какие объекты вы протекаете. Обратите внимание, что объект, который вы протекаете, не является (обычно) тем же, что и объект, который его протекает. –

ответ

1

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

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

[json release]; 
json = nil; 

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

+0

Привет, Роб Спасибо за ваш ответ. В настоящее время я использую Leopard и X-Code 3.1.4, если снежный барс более полезен, тогда я обновляю свою систему как можно скорее. С другой стороны, у меня уже головная боль, я много чего пробовал. С другой стороны, я должен доверять Инструменты? вероятно, я искал неправильное место mycode последние несколько дней. – fyasar

+0

Кстати, я подумал, может быть, проблема, исходящая от SBJSON (я знаю, что знаю эту глупую идею, даже все отлично используют), затем я изменил строки парсера json на TouchJson, я увидел, что результат такой же, проблема в моем коде, я конечно, но я не знаю, где. Я загрузил свой пример приложения в это место: http://hepsikolay.com/MemoryLeakApp.zip Не могли бы вы скачать его? – fyasar

+0

И посмотрите на классы> контроллеры> NetworkSelection.m line 33, вы увидите, что строка self.networkList = arrayResponse; Я думаю, проблема возникает из этой строки. Итак, изменив эту строку на "self.networkList = nil;" Он работает, он не дает никакой утечки памяти в Инструменты. Где моя ошибка? пожалуйста, спасите мой разум. – fyasar

0

Существует инструмент, который намного проще в использовании, чем инструменты. Инструмент - это статический анализатор Clang. The website describes как установить и использовать набор инструментов. Он настолько прост в использовании и очень эффективен. Я использую это все время.

команды являются:

xcodebuild clean 
scan-build -k -V xcodebuild 

Это очень проста в использовании, как результаты приходят в веб-браузере! Он поймает утечки, которые приборы не поймают. Это инструмент, который Apple интегрировала в Snow Leopard ... он доступен вам и в Leopard. Выезд the website for directions ..

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

+0

Привет, я уже пробовал ваше предложение, но результат такой же. – fyasar

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