1、nil和null从字面意思来理解比较简单,nil是一个对象,而NULL是一个值,我的理解为nil是将对象设置为空,而null是将基本类型设置为空的,个人感觉有点像属性当中,基本类型分配为assign NSString类型一般分配copy,而对象一般用retain。而且我们对于nil调用方法,不会产生crash或者抛出异常。
看一段

nil -> Null-pointer to objective- c object

NIL -> Null-pointer to objective- c class

null-> null pointer to primitive type or absence of data.

看一下用法

NSURL *url = nil;

Class  class = Nil;

int *pointerInt = NULL;

nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空。这些可以理解为nil,Nil, NULL的区别吧。

2、一个可以研究一下的问题
在dealloc中
-(void) dealloc
{
self.test = nil; 
[_test release];
test = nil;
}
这几个的区别
先说最简单的  [_test release]; 这个就是将引用技术减1,所谓的引用计数就是看看有多个指针指向一块内存实体,当release一次,就是指针减少一个,release到了0的时候,就是真正把这块内存归还给系统的时候了

再说self.test = nil;说明一下 属性和setter和getter方法就不难理解了

-(void) setTest:(NSString *)newString
{
if(_test != newString)
[_test release];
_test = [newString retain];
}
-(NSString *)test
{
return  _test;
}
这个是setter和getter方法,而在这个问题中相当于刚才的代码改变为
if(_test != nil)
[_test release];
_test = nil;
现在就比较容易解释了,setter方法会retain nil对象,在这之前已经先release了旧的对象,这个方法优点是成员变量连指向随机数据的机会都没有,而通过别的方式,就可能会出现指向随机数据的情况。当release了之后,万一有别的方法要用要存取它,如果它已经dealloc了,可能就会crash,而指向nil之后,就不会发生错误了。nil说白了就是计数器为0,这么说吧,当真正release一个对象的时候,NSLog是打印不了它指向的内存控件的,而当nil的时候,是可以打印出来指向的一个内存空间。
那么现在也不难解释test = nil;  单纯的这种用法可以说是自己给自己制造内存泄露,这里可以这么理解,就是相当于将指向对象的指针直接和对象一刀两断了。直接让test指向nil,而内存实体不会消失,也不会有系统回收。

浅谈关于nil和 null区别及相关问题相关推荐

  1. c语言宽字符与wchar,浅谈c++ 字符类型总结区别wchar_t,char,WCHAR

    1.区别wchar_t,char,WCHAR ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数. UNICODE:wchar ...

  2. 浅谈 unix, linux, ios, android 区别和联系

    浅谈 unix, linux, ios, android 区别和联系 网上的答案并不是很好,便从网上整理的相对专业的问答. 1.UNIX 和 Linux UNIX 操作系统(尤尼斯), 是一个强大的多 ...

  3. 建造者模式浅谈 与工厂模式的区别

    感谢您的阅读.如果感觉文章对您有用,麻烦您动动手指点个赞,以资鼓励.谢谢! 转载请注明出处哈 建造者模式浅谈 与工厂模式的区别_茄子_土豆的博客-CSDN博客_建造者模式和工厂模式的区别 创建对象时构 ...

  4. 浅谈线程池(下):相关试验及注意事项

    三个月,整整三个月了,我忽然发现我还有三个月前的一个小系列的文章没有结束,我还欠一个试验!线程池是.NET中的重要组件,几乎所有的异步功能依赖于线程池.之前我们讨论了线程池的作用.独立线程池的存在意义 ...

  5. IT领域标准化浅谈(一):中国标准化相关组织

    IT领域标准化浅谈(一):中国标准化相关组织 我国IT领域相关标准化组织分为"IT标准化职能部门"和"IT标准化技术组织"两大类. 其中"IT标准化职 ...

  6. 浅谈JDBC与ODBC的区别与应用

    谈到JDBC与ODBC的区别,JDBC和ODBC其实都是用来连接数据库的启动程序.ODBC中文名字叫做开放数据库互联,是微软技术人员开发的开放服务结构中有关数据库的一个组成部分,它建立一组相关的规范, ...

  7. 浅谈Android各版本sdk区别

    转载地址:http://blog.csdn.net/itluochen/article/details/52688935 目录(?)[-] SDK目录 add-ons docs extras plat ...

  8. 浅谈Vue与React的区别

    经过你自己的学习,相信你们你对vue与react已经有了一些了解,也觉得这两大框架有一些相同之处.那咱们就来谈一下你觉得这两大框架有什么地方是不太一样的? 我觉得最大的相同点就是虚拟DOM节点,rea ...

  9. 浅谈 -- ♡ ‧₊˚ JS 与JQ的区别 ‧₊˚ ♡

    jQuery是一个Javascript库,是对于ECMAScript.dom.bom的一个浅封装,让用户更方便操作. 让我们简单谈谈JS与JQ的区别吧! ♡ ‧₊˚  定义  ‧₊˚ ♡ js是网页的 ...

最新文章

  1. 关于不同的MySQL复制解决方案概述
  2. apache解析php的方法
  3. BAT 面试Java技术问题总结
  4. javaweb学习总结(十九):JSP标签
  5. python与tensorflow的关系_python – 在TensorFlow,Session.run()和Tensor.eval()之间有什么区别?...
  6. 码农你会搜“Win10 破解版”吗?
  7. 擦窗机器人不用时怎么收纳_解放双手,再也不用手动擦窗啦
  8. codeforces 286E Ladies' Shop
  9. 计算机主板 华硕 游戏用,华硕Z390-A大师主板,带你畅享极致游戏体验-华硕主板bios设置...
  10. pad连接与数据流动
  11. 除了加速上币,OKEx在DeFi热潮中还能做什么?
  12. 容器化部署之看板工具: Wekan
  13. 植物免疫研究与抗病虫绿色防控:进展、机遇与挑战
  14. Android——打电话(选择指定手机卡)、发短信
  15. win7浏览器主页修改不过来_Win7 IE无法修改默认主页怎么办?解决IE浏览器主页无法修改主页...
  16. 我们都是被宫崎骏爱过的孩子
  17. 解决BLAST Database error: Error pre-fetching sequence data
  18. 计算机z,出国留学_计算机词汇(R-Z)_沪江英语
  19. loopy()代表什么意思,怎么用
  20. thinkphp6对接阿里云短信服务完成定时发送短信功能

热门文章

  1. socket java 服务器端_Java 简单的Socket通讯的服务器端实现
  2. oracle外部表kup-04040,【故障处理】19c PDB中创建外部表时,出现KUP-04040报错
  3. dockerclient 查看端口占用_docker 端口被占用问题解决
  4. 加油python_力扣——gas station (加油站) python实现
  5. controller方法要trycatch吗_拜托,别再满屏try catch了,试试统一异常处理吧
  6. win7重装系统后设置Python2.7环境
  7. 永久开启完整版Google Play
  8. 作业三--阅读《构建之法》1-5章
  9. sqlDataAdapter的FillSchema用法
  10. 开源手机自动化测试框架iQuery入门教程(一)