iOS APP 开发 OC 第七天, nil 跟 NULL 一样吗?

tags: OC 30 day

NULL
可以作为指针变量的值。如果一个指针变量的值是NULL值,代表这个指针不指向内存中的任何一个空间。
NULL其实等价于0,NULL其实是一个宏,就是0。nil
只能作为指针变量的值。代表这个指针变量不指向内存中的任何空间。nil其实也等价于0,也是一个宏,就是0。

所以,Null和nil是一样的。

这两个都是一样的,那到底要如何使用呢?
虽然使用NULL的地方可以是nil,使用nil的地方可以是NULL,但是不建议大家随便使用。

Null和nil什么时候该用哪个?

C指针用NULL

int *p1 = NULL; p1指针不指向内存中的任何一个空间。

OC的类指针用nil

Person *p1 = nil; p1指针不指向任何对象。

如果一个类指针的值为nil 代表这个指针不指向任何对象。

Person *p1 = nil;

那么这个时候,如果通过p1指针去访问p1指针指向的对象的属性,这时候会运行报错。
那么这个时候,如果通过p1指针去调用对象的方法,运行不会报错,但是方法不会执行,没有任何反应。

如果多个指针指向同一个对象?

同类型的指针变量之间是可以相互赋值的。
Person *p1 = [Person new];Person *p2 = p1; 这是完全没有问题的,p1和p2的类型都是Person指针类型的。

代表将p1的值赋值给p2,而p1的值是对象的位址,所以就把对象的地址赋值给了p2。
所以p1和p2指向了同一个对象。
无论透过p1还是p2其实修改的都是同一个对象。
2. 目前为止,只要看见了new,就说明创建了一个新的对象。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章