почему счетчик сохранения показывает значение 2 в приведенном ниже коде? - PullRequest
2 голосов
/ 22 февраля 2011
NSLog(@"retain count 1 for show detail -- %d",[showDetail retainCount]);

ChecklistDetail *detail = [appDelegates.arrayForChecklistDetails objectAtIndex:[sender tag]];

self.showDetail = detail;

NSLog(@"retain count 2 for show detail  -- %d",[showDetail retainCount]);

Здесь, в приведенном выше коде, вывод первого nslog "сохранить счет 1 для детализации шоу - 0" , что правильно. Тем не менее, вывод второго nslog выглядит следующим образом "сохранить счет 2 для детализации шоу - 2".

Как его счетчик увеличивается до 2?

помоги мне, если сможешь ....

Ответы [ 3 ]

2 голосов
/ 22 февраля 2011

потому что, когда вы делаете

self.showDetail = detail;

вы добавляете единицу к счету удержания, если ваше имущество объявлено с 'retain'

установщик обрабатывает для вас счет удержания, когда вы присваиваете свойству свойство, сеттер увеличивает счет удержания для объекта, который вы назначаете свойству . Аналогично, когда вы присваиваете nil свойству, оно освобождает его, т. Е. Уменьшает количество сохраняемых объектов.

1 голос
/ 03 июля 2012

для проверки количества сохранений и правильного управления памятью переменных в iOS, пожалуйста, используйте инструменты и не проверяйте возможность сохранения количества, так как она не очень надежна.

Чтобы начать использовать инструменты в Xcode 4, продолжайте удерживать кнопку «Run» в левом верхнем углу, а затем нажмите на профиль. Это заставит инструменты подойти.

Тогда есть два раздела: Распределение и Утечки. Здесь вы можете проверить распределение памяти и управление переменными.

Наслаждайтесь кодированием ...! :)

0 голосов
/ 22 февраля 2011

Я предполагаю, что ваше свойство showDetail сохраняет семантику. Поэтому, когда вы делаете это:

self.showDetail = detail;

Синтезированное свойство вызывает сохранение. Другой способ вызова вашего сеттера может сделать это более понятным:

[self setShowDetail:detail]

Так что это счетчик сохранения 1. Второе сохранение удерживается массивом.

...