removeFromSuperview和addSubview关系与引用计数?

时间:2012-04-03 09:54:20

标签: iphone ios ipad

我正在开发一个应用程序,其中我正在做很多addSubview和removeFromSuperview,但由于内存管理不足,应用程序崩溃了。我想知道addSubview是否会增加一个视图的引用计数? removeFromSuperView会将引用计数减一吗?

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

是的,如果您创建这样的视图:

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

保留计数为1,您是所有者。

如果您将此视图添加到另一个视图,则第二个视图将是其所有者,并且会增加计数,因此您需要发布:

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

现在,如果要删除该视图,请执行以下操作:

[myView removeFromSuperView];

您的视图将被完全释放,因为removeFromSuperView会减少计数。

所以,总结一下:

  • alloc和addSubView将使您的计数增加1
  • release和removeFromSuperview会将您的计数减少1个

答案 2 :(得分:0)

确切地说是... addSubView会将视图的引用计数增加一,而removeFromSuperView也会将它递减一个..如果您在内存管理中遇到一些问题,请尝试跟踪您的视图的引用计数可能不是被释放。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

调用addSubview会增加引用次数,因此您需要在调用addSubview

后释放您要添加的视图

请参阅Apple UIView reference document其中的addSubview,其中说明“此视图由接收方保留”。