nil和release区别

精贴 置顶
2168 0

nil和release区别困扰了我好久,测试多次并看看网上的解释,做个总结:
      self.p=nil 和[p release]都可以释放内存自不必详细说明,因为属性在赋值的时候是调用set方法,里面封装了release消息。问题就在多出的部分,p被重新赋值为nil。nil据我观察,好像就是一个特定的地址(不知道到我理解是否正确,如果有哪位高手知道具体情况,请赐教呀!!!以及指向哪?应该是空地址,指向0内存),具体是哪我也不是很清楚。这样做的目的只是为内存安全着想的,因为如果你把对象release了,但它可能随机读取其它数据(应该是本对象引用仍然指向此地址,而此地址可能被其它数据所使用),而重新赋值为nil便没有这个问题,nil就是NULL的define。nil有个好处就是,无论你发送任何消息它都不会响应,也就不会异常了。这时候我们有时在类中声明的成员变量,有时并未进行初始化(默认值为nil,但没分配内存空间),这时我们仍然在dealloc方法中进行release也不会异常的,nil的retainCount始终为0,因此你可以无限次进行release。但是如果你进行初始化后则release完后(retainCount==0),倘若再release则产生异常,原因刚才说了,objective-c只为retainCount==0且值为nil不进行处理(nil对所有消息不响应,即可以对nil调用方法,而不致导致程序崩溃或抛出异常),换句话说,当你将对象release后,你的对象并不是nil,我的理解是你仍然指向源地址,虽然此内存并不存在(不过此时它仍然对消息响应,如果不识别则异常)。另外需要提及网上别人提的注意点,有时我们打印已release完毕的对象retainCount时会显示1,而不是预期的0(即异常),因为此时我们虽然最后一次(指预期将调用dealloc的)发出了release消息,但内存并不是立即释放,此时你仍然可以访问,直到系统某时刻释放它。这时候你可以在之前进行一些NSLog等操作,让系统有时间去释放,一切按计划进行。

  • 没有任何评论
今日天气 ···

···

···

···

热门排行
用ASP实现网页BBS 2010-11-01
CSS cursor鼠标样式一览表 2012-06-25
.NET后台写JS代码 2011-11-03
网站地址多出jdfwkey的问题解析及... 2010-08-25
数据库xxx的日志已满,请备份该数... 2013-07-19
百度、google、Yahoo网站地图制作... 2011-01-30
<a>标签的伪类书写顺序问题... 2010-09-04
什么是长尾关键词? 2010-09-24
CEO名言 2010-08-31
Mysql 主从数据库同步 2010-09-12
博主推荐
本个人博客微信公众平台上线啦~~... 2013-10-13
饼哥网络互联上线啦~~要买域名空... 2013-09-20
网站title标题如何正确修改不会被... 2013-08-26
饼哥通讯录系统上线啦,欢迎大家... 2013-08-24
ASP .NET MYSQL 的简单分页 并不... 2013-08-19
网站有弹窗广告这样的站点,百度... 2013-08-17
做淘宝SEO优化需要注意的8大问题 2013-08-17
淘宝网怎么做SEO优化 2013-08-17
站长们要学习的“苍井空精神” 2013-08-17
苹果公司今日发布了iOS 7第五个开... 2013-08-07
随便看看
js获取鼠标在页面中的坐标 2010-10-13
SEO菜鸟:SEO知识自测 2010-10-04
用ASP编写下载网页中所有资源的程... 2010-11-01
.Net 获取URL及其参数 2013-10-21
ocation.href 在IE6中不跳转的解... 2010-08-25
新浪SAE免费空间绑定域名+伪静态... 2013-10-14
css或js控制图片自适应 2010-09-06
将黑客扼杀在从注册表路径里 2010-10-15
什么是泛域名解析 2013-10-21
浮点型(实型)数据 2010-10-16
RSS新闻
传媒新闻
CSDN
八卦新闻
女性新闻
台湾新闻
互联网
军事-新浪博客
IT-新浪博客
汽车新闻
游戏新闻
国际新闻
国内新闻
体育新闻
我的微博
北京 上海 杭州 深圳 广州 成都