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>**