记得曾经有不少朋友问过笔者茬Objective-C
中nil
和Nil
以及NULL
的区别。最重要的是在面试中还有不少朋友常会被问到。记得当年刚找工作的时候笔者就被面试官问到过,现在笔者在这裏统一详细说明
对于学习过C/C++
语言的朋友,对NULL
一定很熟悉吧这就是在C/C++
中的空指针。
在C
语言中NULL
是无类型的,只是一个宏它代表空。我們不研究C++
中的NULL
因为在C++11
以后又有了新的定义,我们不深究
这就是C
语言中所谓的NULL
(C++
的定义比较复杂,这里不说了):
由此我们可知NSNull
是继承于NSObject
的类型。它是很特殊的类它表示是空,nil什么意思也不存储但是它却是对象,只是一个占位对象
使用场景就不一样了,比如说服務端接口中让我们在值为空时传空。
这只是随手举的例子当然我们也可以不传这人参数。如果我们要统一比如通过runtime
来动态将对象转荿我们的参数时,那么可以统一将值为nil
的都设置为[NSNull null]
NULL
、nil
、Nil
这三者对于Objective-C
中值是一样的都是(void *)0
,那么为nil什么意思要区分呢又与NSNull
之间有nil什么意思區别:
-
NULL
是宏,是对于C
语言指针而使用的表示空指针 -
nil
是宏,是对于Objective-C
中的对象而使用的表示对象为空 -
Nil
是宏,是对于Objective-C
中的类而使用的表示類指向空 -
NSNull
是类类型,是用于表示空的占位对象与JS
或者服务端的null
类似的含意