скопировать экземпляр NSMutableString возвращает retainCount -1 - PullRequest
2 голосов
/ 15 февраля 2010

Может кто-нибудь объяснить, почему в последней строке выводится -1? Это происходит, когда copy вызывается для NSMutableString, я ожидаю, что returnCount strFour будет равен 1, поскольку должна быть возвращена неизменная копия.

    NSMutableString *str =[NSMutableString stringWithString:@"hi"];
NSLog(@"new instantiated variable has a retain cout:");
NSLog(@"%d",[str retainCount]);  //1, str is a pointer, its value is a memory address

NSMutableString *strFour =[str copy]; //receiver str is mutable, copy returns an immutable 
NSLog(@"%d",[strFour retainCount]); ////strFour s retain count should be 1, but it had a retain count of -1

Большое спасибо.

1 Ответ

3 голосов
/ 15 февраля 2010

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

Одна из причин, по которой это может быть (-1), потому что строка & ldquo; hi & rdquo; может быть где-то кешировано, а ваша копия ссылается на кешированную строку. Имейте в виду, что на самом деле счетчик является целым числом без знака. Документация для dor -retainCount гласит, что для объектов, которые никогда не освобождаются, счет сохранения должен быть UINT_MAX (который при печати в виде десятичного числа со знаком будет иметь вид & ldquo; -1 & rdquo;). *

...