OC中要區(qū)分對(duì)象類型和基本數(shù)據(jù)類型.
對(duì)象:
NSString *msg = @"I am a msg";
每個(gè)對(duì)象都?由一個(gè)存儲(chǔ)在棧(stack)區(qū)域的指針甜癞,和這個(gè)指針指向的堆(heap)區(qū)域的內(nèi)存塊 兩者構(gòu)成舔株。
*msg -- 是指針
@"I am msg" -- 是存儲(chǔ)在堆中的對(duì)象數(shù)據(jù)
本質(zhì)上拌屏,msg(指針)是一個(gè)number,我們可以用NSLog %p 來打印出這個(gè)指針的值,打印出來的是一個(gè)十六進(jìn)制的值(以0x為開始)
nil 也是一個(gè)number ,指向了堆區(qū)域的起始點(diǎn) (location zero 0x0000)
當(dāng)我們allocate 一個(gè)對(duì)象時(shí), 和得到一個(gè) 非 0x0000 的指針蛉鹿,當(dāng)把這個(gè)對(duì)象賦值給一個(gè)變量時(shí),也就是把這個(gè)指針賦值給這個(gè)棧變量往湿。
NSInteger 并不是一個(gè)對(duì)象哦妖异,它只是 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>**