Почему я получаю эту утечку памяти - PullRequest
0 голосов
/ 27 января 2012

Я получаю утечку памяти с инструментами в этой строке:

NSString * finalString;
finalString = [NSString stringWithFormat:@"%@",chunksString];

chunksString объявлен как поле класса NSString.

Инициализируется другим способом как:

chunksString =  [NSString stringWithString:@""];

А в другом методе принимает значение:

chunksString = [NSString stringWithFormat:@"%@%@",chunksString,string];

Instruments сообщает о 100% утечке в строке, где заполняется finalString.

Как я понимаю, chunksString никогда не инициализируется с помощью alloc, copy или init так же, как finalString. И то, и другое не свойства с retain, почему у меня такая утечка?

Спасибо.

1 Ответ

1 голос
/ 27 января 2012

Утечка первоначального выделения памяти находится в строке:

finalString = [NSString stringWithFormat:@"%@",chunksString];

Утечка связана с тем, что в течение срока службы finalString существует удержание, которое не сбалансировано с выбросом. Вам нужно посмотреть на полное время жизни finalString.

Если вам нужно увидеть, где хранятся, выпускаются и автоматически выпускаются инструменты, использующие объект:

Запустить на инструментах, в Allocations включить «Record reference counts» on (вы должны остановить запись, чтобы установить опцию). Заставьте код проблемы запуститься, остановите запись, найдите там интересующую вас страницу, разверните ее, и вы сможете увидеть, где произошли все сохранения, выпуски и автоматические выпуски.

enter image description here

Еще лучше, используйте ARC, если это возможно, его можно отключить для отдельных файлов, если существует устаревший код, который нельзя перенести в ARC.

...