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] ret开发者_运维技巧ain 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
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.
精彩评论