2012-04-03 91 views
1

我正在研究一个应用程序,其中我正在做很多addSubview和removeFromSuperview,但应用程序因内存管理不力而崩溃。我想知道addSubview是否增加一个视图的引用计数? removeFromSuperView是否将引用计数减1?removeFromSuperview和addSubview关系与引用计数?

+0

可能的[如何发布子视图]的副本(http://stackoverflow.com/questions/9976345/how-to-release-subviews) – jrturton 2012-04-03 10:20:19

回答

0

是的,他们这样做。一般来说,无论何时将对象添加到集合(包括对象的子视图数组)中,它都会增加其保留计数。

0

是的,如果你创建了这样一个观点:

UIView *myView = [[UIView alloc] init]; 

保留计数为1,你是主人。

如果添加此视图到另一个视图,第二视图将成为它的主人,并会增加数量,因此你需要释放:

[mySecondView addSubView:myView]; 
[myView release]; 

现在,如果你想删除看来,你这样做:

[myView removeFromSuperView]; 

而且你的看法会完全释放原因removeFromSuperView递减计数。

所以,总结:

  • alloc和addSubView将由1增加计数每
  • 释放和removeFromSuperview将减1的次数来对每个
0

是完全相同... addSubView会将视图的引用计数增加1,removeFromSuperView会将其减1。如果您在内存管理中遇到一些问题,请尝试追踪您的视图的引用计数,也许它不会被释放。

0

是的,你是对的addSubView增加视添加和removeFromSuperView减少一个引用计数。

0

调用addSubview确实会增加引用计数,因此你需要调用addSubview

Apple UIView reference document其中用于addSubview它指出“这个观点也得到了保留接收”后释放您要添加的视图。