Задача-C: просто еще один вопрос о сохранении счета - PullRequest
1 голос
/ 20 июля 2010

Когда я создаю строку NSString с initWithFormat, я получаю счет сохранения 1

-(NSString *)description
{
 NSString *descr = [[NSString alloc]
 initWithFormat:@"I am the description."];

 NSLog(@"Count: %lu",[descr retainCount]);

 return [descr autorelease];
}

Если вместо этого я использую initWithString, я получаю счет 2147483647

NSString *descr = [[NSString alloc]
initWithString:@"I am the description."];

Таким образом, между этими двумя методами должна быть разница с точки зрения управления памятью. Что здесь происходит?

Ответы [ 2 ]

4 голосов
/ 20 июля 2010

Прежде всего, вас не должно волновать, каков счет удержания, только если вы правильно сбалансировали свои сообщения -init, -copy и -retain с сообщениями -release или -autorelease.

При этом, когда вы создаете экземпляр NSString путем анализа строки формата, для него выделяется память.Когда вы создаете строку, ссылаясь на константную строку в вашем коде, вы в итоге получаете указатель на эту константную строку, и ее счетчик хранения обычно отображается как UINT_MAX.Это деталь реализации, о которой вам не нужно беспокоиться.

0 голосов
/ 21 июля 2010

@ NSResponder / и остальной мир /: нет, не балансируйте init, копируйте и сохраняйте. NARC - это вопрос, балансировать новое…, распределять…, сохранять… и копировать… сообщения - это ответ!

Привет

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