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 条评论
登录 后参与评论

相关文章

来自专栏微服务那些事儿

SpringCloud与elastic-job集成(一)

在项目初期,基于quartz我们做了一个原始的job调度服务,用以执行我们的定时任务,但是随着业务的扩充,对性能及稳定性有了更高的要求.

1.4K9
来自专栏Android干货

Python IO编程

循环读取文件内容,一般读取文件内容一次读取完,内存是不够的,就要实现一次次少量数据读取

722
来自专栏行者常至

(Servlet)常见错误及解决方式

·404数字 指的是:服务器执行完客户端的请求后,返回给客户端一个执行结果的状态编码。

694
来自专栏电光石火

运行jar包找不到主类

在正确编译好java程序之后,打包,然后在命令行输入java -jar ,却弹出找不到或无法加载主类。 一检查,我的path环境变量都是对的呀?jav...

2959
来自专栏技巅

Glusterfs之rpc模块源码分析(中)之Glusterfs的rpc模块实现(1)

1483
来自专栏数据结构与算法

22:紧急措施

22:紧急措施 总时间限制: 1000ms 内存限制: 65536kB描述 近日,一些热门网站遭受黑客入侵,这些网站的账号、密码及email的数据惨遭泄露。你...

3618
来自专栏决胜机器学习

《Redis设计与实现》读书笔记(二十八) ——Redis集群节点结构与槽分配

《Redis设计与实现》读书笔记(二十八) ——Redis集群节点结构与槽分配 (原创内容,转载请注明来源,谢谢) 一、概述 redis集群是...

4016
来自专栏磨磨谈

rbd的image对象数与能写入文件数的关系

对于这个问题,我原来的理解也是:对象默认设置的大小是4M一个,存储下去的数据,如果小于4M,就会占用一个小于4M的对象,如果超过4M,那么存储的数据就会进行拆分...

992
来自专栏社区的朋友们

django 初始化默认数据的一个方法

经常可能会有的一个需求就是,一个表中会有一些默认数据,这些数据未来是可以通过管理端来配置的。所以数据库在被建立之后,会有一些默认数据被插入表中。

1.6K2
来自专栏极客猴

Python 三种遍历目录的方法,轻松帮你找出隐藏文件

无论在 Windows 系统中还是 Linux 系统中,都存在着隐藏文件以及隐藏文件夹。隐藏文件夹一般是系统关键性目录,例如 Windows 系统中的 C 盘中...

1232

扫码关注云+社区