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

tags: OC 30 day

  1. NULL
    可以作为指针变量的值。如果一个指针变量的值是NULL值,代表这个指针不指向内存中的任何一个空间。
    NULL其实等价於0,NULL其实是一个宏,就是0。
  2. 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指针去调用对象的方法,运行不会报错,但是方法不会执行,没有任何反应。

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

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

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


<<:  iOS APP 开发 OC 第七天, 对象在内存中的储存

>>:  Day56. 范例:各国婚礼(访问者模式)

【这些年我似是非懂的 Javascript】Prototype #建构器

今天要来分享一点关於 prototype 和建构器的部分。 建构器所 new 的不是你想的那样 我...

Day28 Plugin 从零开始到上架 - iOS总结

InstagramManager class InstagramManager { private ...

Day06:资料结构 - 伫列(queue)

前言 今天聊到了伫列(queue)这种资料结构,伫列和Day5所提到的堆叠常放在一起看,他们的操作方...

[DAY07] 开始用 Designer 在 Azure Machine Learning 做 AI

DAY07 开始用 Designer 在 Azure Machine Learning 做 AI 我...

NIST 通用风险模型-威胁来源

-NIST 通用风险模型 (NIST SP 800-30 R1) NIST 通用风险模型描述了威胁...