強(qiáng)指針
- 默認(rèn)情況下盯蝴,我們聲明一個(gè)指針 這個(gè)指針就是1個(gè)強(qiáng)指針
- 我們也可以使用__strong來顯式聲明這是一個(gè)強(qiáng)指針
Person *p1; 這是一個(gè)強(qiáng)指針,指針默認(rèn)情況下都是強(qiáng)指針
__strong Person *p2; 這也是一個(gè)強(qiáng)指針,使用__strong來顯式的聲明強(qiáng)指針
弱指針:使用__weak標(biāo)識(shí)的指針就叫做弱指針
無論是強(qiáng)指針還是弱指針,都是指針弄兜,都可以用來存儲(chǔ)地址,這1點(diǎn)沒有任何區(qū)別
都可以通過這個(gè)指針訪問對(duì)象的成員
唯一的區(qū)別就是在ARC模式下,他們用來作為回收對(duì)象的基準(zhǔn)
如果1個(gè)對(duì)象沒有任何強(qiáng)類型的指針指向這個(gè)對(duì)象的時(shí)候替饿,對(duì)象就會(huì)被自動(dòng)釋放
確認(rèn)程序是否開啟了ARC模式
1.默認(rèn)情況下语泽,XCode開啟ARC機(jī)制
2.ARC機(jī)制下,不允許調(diào)用retain视卢、release踱卵、retainCount、autorelease方法
3.在dealloc中 不允許[super dealloc]
演示第一個(gè)ARC案例
int main (int argc, const char *argv[])
{
@autoreleasepool
{
Person *p1 = [Person new]; //p1是個(gè)強(qiáng)指針
NSLog(@"------------");
} //當(dāng)執(zhí)行到這里的時(shí)候据过,p1指針被回收惋砂,那么Person對(duì)象就沒有任何強(qiáng)指針指向它了,對(duì)象就在這里被回收
return 0;
}
int main (int argc, const char *argv[])
{
@autoreleasepool
{
__strong Person *p1 = [Person new];
__weak Person *p2 = p1;
p1 = nil;
}
return 0;
}
p1 = nil蝶俱,p1就不指向這個(gè)對(duì)象了班利,只剩下p2指這個(gè)對(duì)象饥漫,但是p2是個(gè)弱指針榨呆,所以對(duì)象就被回收了