Управление памятью в сообщении - PullRequest
0 голосов
/ 27 августа 2010

Возьми линию

[angleLabelInRadians setText:[[NSString alloc] initWithFormat:@"%.3g", [poly angleInRadians]]]; 

При создании объекта NSString в сообщении, мне все еще нужно выпустить эту NSString и, если да, как мне это сделать, если я не создал указатель на объект?

Кроме того, это правильная процедура кодирования или эта строка слишком длинная? Было бы лучше разделить это в следующей форме?

NSString *polyRad = [[NSString alloc] initWithFormat:@"%.3g", [poly angleInRadians]];
[angleLabelInRadians setText:polyRad];
[polyRad release];

Ответы [ 3 ]

2 голосов
/ 27 августа 2010

Если вы не находитесь в окружении без пула авто-выпусков, вы чаще всего просто воспользуетесь одной из удобных функций, чтобы выполнить описанное выше.

[angleLabelInRadians setText:[[NSString stringWithFormat:@"%.3g", [poly angleInRadians]]; 

Если вы не хотите использовать авто-релиз, вам придется сделать

NSString *s = [[NSString alloc] initWithFormat:@"%.3g", [poly angleInRadians]];
[angleLabelInRadians setText:s];
[s release];
2 голосов
/ 27 августа 2010

Существует простое правило: освободите каждый созданный вами объект с помощью «init» или «new». В приведенном выше примере вы можете вызвать «autorelease», чтобы освободить строку или статический инициализатор, например [NSString stringWithFormat: ...] - он использует autorelease внутренне.

1 голос
/ 27 августа 2010

У вас есть два варианта:

Тот, который вы предложили: разделить на три утверждения.

Лично я думаю, что лучше.У вас есть четкое представление о том, что вы делаете, просто взглянув на эти линии деревьев.Не очень понятно, что вы хотели сделать в одной строке.(Но это мое личное мнение)

Или вы всегда можете сделать так, как сказал Гробра, и автоматически высвободить строку.

Используя метод удобства

[angleLabelInRadians setText:[NSString stringWithFormat:@"%.3g", [poly angleInRadians]]];

Или просто автоматически выпустить строку

[angleLabelInRadians setText:[[[NSString alloc] initWithFormat:@"%.3g", [poly angleInRadians]] autorelease]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...