Search code examples
objective-cretaincount

calling 'subviews' method on a cell's contentView increases retain count


I don't know what is going on here but I have the following code in my init method:

NSLog(@"retain count in init before alloc: %d", [game1CustomEntityInfoControl retainCount]);

game1CustomEntityInfoControl = [[CustomEntityInfoControl alloc] initWithFrame:CGRectZero];

NSLog(@"retain count in init after alloc: %d", [game1CustomEntityInfoControl retainCount]);

[[self contentView] addSubview:game1CustomEntityInfoControl];

NSLog(@"retain count in init after adding to superview: %d", [game1CustomEntityInfoControl retainCount]);

I know I should be releasing game1CustomEntityInfoControl since the superview retains the object but leave that for now.

Then in my layoutSubviews method I have:

// We always call this, the table view cell needs to do its own work first
[super layoutSubviews];

NSLog(@"retain count as soon as you enter layoutSubviews: %d", [game1CustomEntityInfoControl retainCount]);

[[self contentView] subviews];

NSLog(@"retain count in layoutSubviews after calling subviews on contentView: %d", [game1CustomEntityInfoControl retainCount]);

This is the output:

2010-10-24 15:14:08.598 Sangaku[8592:207] retain count in init before alloc: 0

2010-10-24 15:14:08.603 Sangaku[8592:207] retain count in init after alloc: 1

2010-10-24 15:14:08.611 Sangaku[8592:207] retain count in init after adding to superview: 2

2010-10-24 15:14:08.616 Sangaku[8592:207] retain count as soon as you enter layoutSubviews: 2

2010-10-24 15:14:08.621 Sangaku[8592:207] retain count in layoutSubviews after calling subviews on contentView: 3

Look at the last line of output. How did the retain count go to 3? Does subviews internally do some allocation that is returned as autoreleased?

Thanks


Solution

  • AFIAK you can't rely on the retainCount behaving this way. The Cocoa framework internals could be don't anything with your objects, perhaps on a different thread / in an asynchronous fashion.