Выпуск NSString, с которым я покончил, вызывает сбой - PullRequest
0 голосов
/ 07 июня 2011

Обратите внимание на закомментированную строку [printvolfirst release]; ниже. Если я откомментирую это, программа вылетает. Я не могу понять, почему. Переменная printvolfirst не используется нигде, кроме строк кода, которые вы видите здесь. После того, как это назначено на printvol, я закончил с этим. Так почему бы не выпустить его?

vol = vol / 1000000;
NSNumberFormatter * format = [[NSNumberFormatter alloc] init] ;
[format setPositiveFormat:@"#.#"];
NSString * printvolfirst = [[NSString alloc]init];
printvolfirst = [format stringFromNumber:[NSNumber numberWithFloat:vol]];

NSString * printvol = [[NSString alloc] initWithFormat: @"%@M", printvolfirst];

self.Pop.vol.text = printvol;
[printvol release];
//[printvolfirst release];
[format  release];

Ответы [ 2 ]

3 голосов
/ 07 июня 2011

stringFromNumber: автоматически освобождает возвращаемый объект. Если вы отпустите его снова, он будет выпущен после того, как он был освобожден.

На самом деле вам даже не нужен этот код:

NSString*printvolfirst=[[NSString alloc]init];

Вы можете включить «Запустить Static Analyzer» в настройках сборки, чтобы получать предупреждения о таких вещах.

1 голос
/ 07 июня 2011

Вы освобождаете строку autorelease d.Хотя вы делаете NSString*printvolfirst=[[NSString alloc]init];, вы теряете ссылку на этот объект, когда вы делаете printvolfirst=[format stringFromNumber:[NSNumber numberWithFloat:vol]];, когда вы присваиваете автоматически выпущенный объект printvolfirst.В процессе вы также создали утечку памяти.Вам не нужно выпускать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...