Странная утечка памяти при вызове SBJSON - PullRequest
0 голосов
/ 14 октября 2011

Я тщательно тестировал свое приложение, используя инструмент Leaks в Instruments, и иногда при использовании SBJSON возникает утечка.Посмотрев через сеть, кажется, что SBJSON имеет тенденцию не просачиваться сам по себе, поэтому, должно быть, я так и называю.Вот снимок экрана с ошибочной строкой в ​​моем коде, на которую указывает инструмент Leaks:

enter image description here

Эта утечка обнаруживается примерно через 15 минут после запуска в данном конкретном прогоне и полностьюнепредсказуемо, когда это может произойти.Instruments сообщает, что утечка памяти относится к типу NSNumber, и эта выделенная строка содержится в методе, который вызывается все время на протяжении выполнения приложения.Я попытался вывести значение строки _source на консоль, но в выводе нет ничего странного, когда происходит утечка.Вот еще один снимок экрана, показывающий историю утечки блока:

enter image description here

Я запускаю приложение на симуляторе iPhone 4.2, и мое тестирование в основном включает в себя просмотр каждого представления в приложении, чтобыубедитесь, что все работает нормально.Как вы можете видеть на скриншоте выше, вызов JSONValue переходит к методу, определенному в NSString + SBJSON.m, поэтому я почти уверен, что в моем коде есть проблема.Есть идеи, что я делаю не так?

1 Ответ

1 голос
/ 14 октября 2011

Когда вы присваиваете _object = [[_source JSONValue] retain];, вы увеличиваете количество ссылок объекта, возвращаемого на JSONValue. В методе initWithData:(NSData *)data этот объект не освобождается. Поэтому Analyzer считает, что произошла утечка памяти.

Вы должны проверить, выпускаете ли вы _object, прежде чем потерять ссылку на него или в методе dealloc:

[_object release];
...