标志 |
含义 |
值 |
NULL |
C指针的字面零值 |
(void *)0 |
nil |
Objective-C对象的字面零值 |
(id)0 |
Nil |
Objective-C类的字面零值 |
(Class)0 |
NSNull |
用来表示零值的单独的对象,可以作为数组的占位符 |
NSNull |
kCFNull |
NSNull的单例 |
kCFNull |
字面零值的解释
//数据输出应该是Nil
Class class = class_getSuperclass(Nil);
if (class == nil) {
NSLog(@"class:nil");
}
if (class == Nil) {
NSLog(@"class:Nil");
}
if (class == NULL) {
NSLog(@"class:NULL");
}
if (class == [NSNull class]) {
NSLog(@"class:NULL");
}
//打印结果
2017-09-19 11:17:31.536 xctest[3144:977580] class:nil
2017-09-19 11:17:31.537 xctest[3144:977580] class:Nil
2017-09-19 11:17:31.540 xctest[3144:977580] class:NULL
说明比较大小中nil、Nil、NULL的值都相等(字面零值)
id 和 void * 的区别
id本身就是一个指针,而且可以指向任何一个继承了Object(或者NSObject)类的对象。
所以需要注意的是:id是一个指针,所以你在使用id的时候不需要加星号。
比如id foo=nil定义了一个nil指针,这个指针指向NSObject的一个任意子类。
而id *foo=nil则定义了一个指针,这个指针指向另一个指针,被指向的这个指针指向NSObject的一个子类。
网友评论