美文网首页Uiview
iOS objectView.removeFromSupervi

iOS objectView.removeFromSupervi

作者: Raindew | 来源:发表于2018-01-10 17:21 被阅读450次
    额,标题很长,但不得不这样写。

    很多人可能碰到和我一样的疑惑,我明明把某个objectView直接removeFromSuperview了,为什么我下面判断if(objectView){}这个分支仍然能进去呢?我不是已经删除了吗?

    实际上,你可能和我一样,没有理解这个removeFromSuperview到底是什么意思,先来说说这个属性的意思:

    官方文档这样描述它

    Unlinks the receiver from its superview and its window, and removes it from the responder chain.
    If the view’s superview is not nil, the superview releases the view.
    

    把当前view从它的父view和窗口中移除,并且也把它从响应事件的响应链中移除。如果这个视图不为nil,父视图会释放这个视图。

    上面说了,父视图会释放这个视图,但是我们实际测试却没有,那么我们猜测可能是因为属性的强引用导致其根本没有释放。果然,查了下资料,有人这样说:

    如果没有其他地方再对视图进行强引用,则会从内存中移除。如果还存在其他强引用,视图只是不在屏幕中显示,并没有将该视图从内存中移除。所以如果需要使用该视图,不需要再次创建,而是直接addSubview就可以了。

    由此,就好解决了,直接把强引用的strong修改成weak,局部创建对象,用weak指向该对象即可。这样弱引用就不会影响父视图对目标视图的释放操作,继而判定其对象的是否存在也可行了。

    iOS技术交流群: 511860085 欢迎加入!

    相关文章

      网友评论

        本文标题:iOS objectView.removeFromSupervi

        本文链接:https://www.haomeiwen.com/subject/vagonxtx.html