美文网首页
iOS中 nil 和Nil区别

iOS中 nil 和Nil区别

作者: 平常心_kale | 来源:发表于2020-03-24 17:05 被阅读0次

id 被成为万能指针,也就是可以指向任何对象.可以用来定义变量, 可以作为返回值。id在编译的时候不能判断对象的真实类型
NSObject * 本身就是定义指向NSObject类型的指针.
instancetype在编译的时候可以判断对象的真实类型,instancetype只能用于作为返回值
这两者都是既可以作为返回值,又可以作为变量修饰

主要区别则在于id修饰的变量不遵循<NSObject>协议.这在实现代理模式中会体现出其区别,例如在调用代理方法时会先判断该代理是否能够响应某个方法 [obj respondsToSelector:]就定义在NSObject协议中

  1. nil:对象为空
    当一个对象置为nil时,这个对象的内存地址就会被系统收回。置空之后是不能进行retain,copy等跟引用计数有关的任何操作的
  2. Nil:类为空。
    nil完全等同于Nil,只不过由于编程习惯,人们一般把对象置空用nil,把类置空用Nil。
  3. NULL:基本数据对象指针为空,这个是从C语言继承来的,就是一个简单的空指针
  4. NSNull集合对象无法包含 nil 作为其具体值,如NSArray、NSSet和NSDictionary。相应地,nil值用一个特定的对象 NSNull 来表示
    [NSNull null]和nil的区别在于,nil是一个空对象,已经完全从内存中消失了,而如果我们想表达“我们需要有这样一个容器,但这个容器里什么也没有”的观念时,我们就用到[NSNull null],
    它就是为“值为空的对象”。如果你查阅开发文档你会发现NSNull这个类是继承NSObject,并且只有一个“+ (NSNull *) null;”类方法。这就说明NSNull对象拥有一个有效的内存地址,所以在程序中对它的任何引用都是不会导致程序崩溃的

相关文章

网友评论

      本文标题:iOS中 nil 和Nil区别

      本文链接:https://www.haomeiwen.com/subject/zcvhjhtx.html