一般性问题:当您向UIView添加项目时,是否会将所有者数量增加1?您现在添加项目的主视图是否也成为所有者?
示例:
mainView = [[UIView alloc] init];
UILabel *label = [[UILabel alloc] init];
[mainView addSubview:label] //does this increase owner count by 1?
[label release] //and this decreases it by 1?
答案 0 :(得分:3)
你发布你 retain / init。
当您致电addSubview:
时,它会增加保留计数(或者您所说的所有者计数)。但这种增加属于mainView
。因此,将来mainView
最多可以释放子视图,而不是你。
因此,当您init
标签时,它会将保留计数增加到1.当您调用addSubview:label
时,它会将保留计数增加1,然后再将其设置为2.然后释放标签,减少保留计数回到1并抵制你以前的初始。
然后当从mainView中删除标签时,其保留计数将返回到0并将被取消分配。
永远不要使用方法retainCount
,无论您是观察它还是采取行动。由于很多幕后代码,此方法不会显示您所期望的内容。只是不要使用retainCount
。
答案 1 :(得分:1)
子视图存储在NSArray中,它会为添加的每个对象发送一个保留。原则上,是保留计数按预期进行,但实际上,由于API本身幕后发生的所有保留和释放,您实际上永远无法可靠地观察保留计数。试图直接跟踪保留计数只会导致悲伤。
最好只遵循以下规则:如果使用new或alloc-init创建对象,则释放它。如果你不做前者,你就不要做了。