В Tableview: cellForRowAtIndexPath:Почему [NSObject retainCount] иногда возвращает неожиданные значения?
// Make a cell:
UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"Default"] autorelease];
// Make a spinner:
UIActivityIndicatorView *spin = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
// [spin retainCount] = 1
// Start spinning
[spin startAnimating];
[cell.contentView insertSubview:spin atIndex:0];
// [spin retainCount] = 3. Huh?
// I would have expected it to be 2 at this point.
[spin release];
// [[cell.contentView.subviews objectAtIndex:0] retainCount] = 2
На данный момент я бы подумал cell.contentView.subview является единственным объектом с удержания на блесны. Но, очевидно, показатель сохранения 2 указывает на то, что что-то еще его удерживает. Может ли кто-нибудь объяснить мне, кто является объектом тайны, который имеет удержание на счетчике помимо массива subview cell.contentView?
Приветствие,
Doug
На самом деле, для объектов I» m not autoreleasing, preserveCount никогда не ошибался для меня. Я использовал его часто и надежно. Я не уверен, что согласен с вашей оценкой в общем случае, но в этом конкретном случае я думаю, что вы, вероятно, правы. UITableView и UITableViewCell подходят ко всякой хитрости под капотом. – dugla
Вам не нужно самостоятельно проверять объекты, это может быть некоторый код, который не под вашим контролем. Cocoa и Cocoa-Touch используют автореализованные объекты повсюду. Например, синтезированные геттеры (атомных, сохраняющих) свойств делают это, чтобы гарантировать, что объекты будут живы при возврате геттера. И есть другие места, которые, я уверен, вы не знаете. –