Почему retainCount возвращает -1 - PullRequest
0 голосов
/ 14 февраля 2012

Как я знаю, если количество сохраняемых объектов достигает 0, вызывается его освобождение. Но я получаю счет сохранения как -1.Что это значит?

Я использую следующий код -

    Demo *obj1 = [[Demo alloc] init];
    NSString *s = [[NSString alloc] initWithString:@"mithilesh"];
    NSString *s1 = [NSString stringWithString:s];
    [s release];
    object_setInstanceVariable(obj1, [propertyName cString], s1);
    //printing retain count 
    NSLog(@"retain count of name = %i",[obj1.name retainCount]);

Вывод:

   retain count of name = -1

Строка, возвращаемая методом stringWithString: когдаполучить освобождение?

1 Ответ

11 голосов
/ 14 февраля 2012

Это означает, что вам нужно прекратить звонить -retainCount. Это просто функция отладки, и если вы не инженер Apple, работающий над системными фреймворками или компилятором, вы, вероятно, не имеете никакого отношения к этой функции.

Тем не менее, здесь вы видите INT_MAX, интерпретируемый как число со знаком. Похоже, у вас есть постоянная строка, вероятно, @"mithilesh". Постоянные строки - это синглтоны, которые не участвуют в -retain и -release, и -retainCount из INT_MAX свидетельствует об этом. Но на самом деле это всего лишь предположение, и вы должны перестать смотреть на -retainCount.

Если вы мне не верите, может быть, вы поверите Биллу Бамгарнеру, когда он говорит: «1013 * retainCount бесполезен» .

...