繁体   English   中英

iPhone:添加到子视图时内存的工作原理

[英]iPhone: How Memory works when adding to subview

一般问题:当您向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?

释放保留/ init的内容。

当您调用addSubview: ,它会增加保留计数(或者如您所说的所有者计数)。 但是这种增加属于mainView 所以mainView将来某个点发布子视图是由mainView决定的。

因此,当您init标签时,它会将保留计数增加到1.当您调用addSubview:label它会将保留计数增加1,然后再释放2.然后释放标签,将保留计数减少回1并抵消先前在里面。

然后,当从mainView中删除标签时,其保留计数将返回到0并且将被取消分配。

永远不要使用方法retainCount ,无论您只是观察它还是采取行动。 由于很多幕后代码,此方法不会显示您所期望的内容。 只是不要使用retainCount

子视图存储在NSArray中,它会为添加的每个对象发送一个保留。 原则上,是的,保留计数按预期进行,但实际上,由于API本身幕后发生的所有保留和释放,您实际上永远无法可靠地观察到保留计数。 试图直接跟踪保留计数只会导致悲伤。

如果你使用new或alloc-init创建一个对象然后释放它,那么最好遵守规则。 如果你不做前者,你就不要做了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM