博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ARC 下两种释放对象的方法
阅读量:5904 次
发布时间:2019-06-19

本文共 724 字,大约阅读时间需要 2 分钟。

hot3.png

使用了 ARC 之后,无疑大大减少了程序员进行内存管理的压力。你再也不用写 release/autorelease 代码了,再也不用写dealloc 方法了。但这不等于程序员不需要内存管理。例如,你需要在 viewDidUnload 方法中对对象进行释放,以防当内存警告发生时,你没有内存可以回收。当然ARC 托管对象的释放方式与 MRC 是不同的。对于 ARC 托管对象,你必须用 ARC 特有的两种释放方式:

[self setOjbect:nil];

或者:

self.object=nil;

这里,object 是你要释放的对象名称。

这两种释放方式基本上是等效的,甚至许多书籍宣称二者完全等效。对于有 Java/C++/C# 开发经验的程序员来说,点语法的调用显然更加亲切。

但我要告诉你的是,二者并不是完全等同。对于 object 对象并未初始化(为nil)的情况下,[self setObject:nil] 显得更安全。

如果 object 未初始化,self.object=nil 调用会导致一个“向已销毁的对象发送消息”错误,同时程序崩溃。 而[selfsetObject:nil]则根本不会。

 

【声明】确实是笔者理解错误,大部分情况下二种释放方式是完全一样的。但某种情况下例外,笔者曾经跟踪过一个程序,这个程序会莫名其妙 crash,后将 self.object=nil 一句换成 [self setObject:nil] 就不会了。具体原因不明,猜测到的一种可能是, object 对象 setter/getter 方法被重载。

转载于:https://my.oschina.net/u/1984662/blog/291110

你可能感兴趣的文章
我的友情链接
查看>>
******防范-***非法探取密码的原理及安全防范知识
查看>>
维思营销策划网:中英文旅游网站策划方案
查看>>
ORACLE安装之ASM安装
查看>>
我的友情链接
查看>>
Kubernetes 如何打赢容器之战?
查看>>
javascript事件
查看>>
解决stackoverflow无法登陆问题
查看>>
android相机区域拍照,快速集成
查看>>
转 ubuntu解压命令全览
查看>>
Android开发的前景分析——之你为何看好Android?
查看>>
linux学习笔记
查看>>
页面自动刷新
查看>>
No free lunch in search and optimization
查看>>
分析 Spring 的编程式事务管理及声明式事务管理(转)
查看>>
网站优化和竞价有什么区别
查看>>
MySQL开源热备工具XtraBackup的原理与程序说明
查看>>
20181216文件查找
查看>>
rsync+inotify实现数据实时同步
查看>>
制作半虚拟镜像以及常见问题解决
查看>>