2013-08-07 60 views
0

如果我有一个UIView实例变量,我将其作为子视图添加到另一个视图;ARC和UIView实例变量

在使用ARC时调用removeFromSuperview是否会释放一个实例变量?或者我可以再次将其添加到不同的视图?

+1

它没有**释放**,但它**释放**它。 – 2013-08-07 15:22:44

+0

谢谢,所以自动引用计数是可以安全分配初始化一个uiview ivar,将它添加为子视图,然后在某个时候稍后调用removefromsuperview,然后在稍后添加相同的uview作为子视图到另一个视图?或者我试图在removefromsuperview被调用后尝试添加它作为子视图来冒空指针错误? – Woodstock

+0

Java绑定,是吧? Objective-C没有NULL指针错误。此外,释放不会出空指针(至少不在非ARC下,不确定关于ARC)。但是对于你的问题:如果你也有一个参考,而不仅仅是它的超级观点引用它,那么是的,它是安全的。 – 2013-08-07 15:27:05

回答

1

如果您有一个强大的指向您要添加/删除的视图的指针,那么调用removeFromSupeview将不会导致对象被释放。您可以通过将UIView声明为ivar或将其声明为强属性(首选)来获得强指针。但是,如果你没有其他强壮的指向视图的指针,那么如果你从它的超级视图中删除它,它将被ARC解除分配。 (超级观点保持一个强大的指针,并且你打破了这种联系。)

+0

对它有一个局部变量引用(如果你从它的超级视图中删除一个视图,你可能会这样做)也会保留ARC中的对象,直到引用被改变或方法返回。 – BergQuester

+0

@BergQuester没有指向与保留计数相同的指针? – abbood

+0

@nick然后声明为强属性可以添加和removefromsuperview多次吗? – Woodstock