Цель C: мне нужно выпустить строку NSString в этом примере? - PullRequest
1 голос
/ 08 марта 2010
debugTestLabel.text = [[NSString alloc] initWithFormat:@"%g, %g", @"Testing String", @"I am another"];

Я выделяю строку и сразу назначаю тексту, но не знаю, может ли строка автоматически разблокироваться или нет.

Ответы [ 7 ]

4 голосов
/ 08 марта 2010

Нет, это не будет авто-релиз, вы должны выпустить его. Однако, если вы использовали [NSString stringWithFormat], он автоматически выпустил бы.

1 голос
/ 08 марта 2010

Если вы прочитаете документацию , вы обнаружите, что свойство text скопировано - вам не нужно хранить этот экземпляр NSString.

Так что ответ да: вы можете (автоматически) выпустить этот NSString экземпляр.

1 голос
/ 08 марта 2010

да, alloc == release (простое правило для запоминания)

1 голос
/ 08 марта 2010

jupp, добавьте autorelease в конец

0 голосов
/ 07 декабря 2010

Вы должны освободить строку сразу после использования строки.

0 голосов
/ 08 марта 2010

Правило таково: если метод начинается с init, вы должны release (или autorelease it). В противном случае это автоматически выпущенный объект (например, stringWithFormat:). Так что в этом случае вы должны изменить код на:

debugTestLabel.text = [[[NSString alloc] initWithFormat:@"%g, %g", @"Testing String", @"I am another"] autorelease];

или более стандарт,

debugTestLabel.text = [NSString stringWithFormat:@"%g, %g", @"Testing String", @"I am another"];
0 голосов
/ 08 марта 2010

На самом деле, это зависит.

[[NSString alloc] initWithFormat:...];

Это создаст строку с сохранением количества +1. Если свойство text имеет значение @property(retain) или @property(copy), то debugTestLabel примет его в собственность, поэтому вам следует -release (или -autorelease) впоследствии.

Однако, если свойство text имеет значение @property(assign), то debugTestLabel не претендует на владение, и вы должны убедиться, что текст живет дольше, чем его использует метка.

(Если метка является подклассом UILabel, то это первый случай.)

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