OC中要区分对象类型和基本数据类型.
对象:
NSString *msg = @"I am a msg";
每个对象都�由一个存储在栈(stack)区域的指针,和这个指针指向的堆(heap)区域的内存块 两者构成。
*msg -- 是指针
@"I am msg" -- 是存储在堆中的对象数据
本质上,msg(指针)是一个number,我们可以用NSLog %p 来打印出这个指针的值,打印出来的是一个十六进制的值(以0x为开始)
nil 也是一个number ,指向了堆区域的起始点 (location zero 0x0000)
当我们allocate 一个对象时, 和得到一个 非 0x0000 的指针,当把这个对象赋值给一个变量时,也就是把这个指针赋值给这个栈变量。
NSInteger 并不是一个对象哦,它只是 int 的 typedef而已
Talk is cheap, show me the code!!
NSLog(@"nil is %p",nil);
NSLog(@"Nil is %p",Nil);
NSLog(@"Null is %p",NULL);
NSLog(@"nil is %@",nil);
NSLog(@"NSNULL is %@",kCFNull);
nil is 0x0**
Nil is 0x0**
Null is 0x0**
nil is (null)**
NSNULL is <null>**