iOS objectView.removeFromSuperview之后if(self.objectView)仍然成立?

额,标题很长,但不得不这样写。

很多人可能碰到和我一样的疑惑,我明明把某个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指向该对象即可。这样弱引用就不会影响父视图对目标视图的释放操作,继而判定其对象的是否存在也可行了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

扫码关注云+社区