欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

ARC的原理詳解-創(chuàng)新互聯(lián)

1,ARC的本質(zhì)

為武寧等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及武寧網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司、武寧網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

ARC本質(zhì)是NSAutoreleasePool的直接應(yīng)用,

@autorelease{

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

}

其實(shí)是:

NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

int iRet = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

[pool release];

然后,各種allocrelease后,對(duì)應(yīng)refcount都設(shè)置成0,在出自己的引用范圍后,就背nsautoreleasepool自動(dòng)的釋放掉,如下:

NSString* str = [[[NSString alloc] init] autorelease];

.......

其中str已經(jīng)進(jìn)行了autorelease,當(dāng)結(jié)束生命周期后,str直接釋放掉。

2,NSAutoreleasePool的原理

AutoreleasePoolPage是一個(gè)C++實(shí)現(xiàn)的類。

typedef struct{magic_t const magic;id* next;pThread_t* thread;AutoreleasePoolPage* Parent;AutoreleasePoolPage* Child;uint32_t const depth;uint32_t hiwat;}其中:1,magic是魔術(shù)數(shù)字,劃分內(nèi)存邊界,數(shù)據(jù)結(jié)構(gòu)起始處;2,next,是指向該AutoreleasePool的邊界;3,thread, 是該AutoreleasePool的線程,每個(gè)線程有自己的AutoreleasePool; 4,Parent、child,用于建立鏈表,一個(gè)AutoreleasePool不一定足夠;   每個(gè)NSAutoreleasePool都是4096bytes,不夠的就申請(qǐng)新的NSAutoreleasePool,用child, parent連接起來(lái),見(jiàn)上圖: 1,“類實(shí)例所占內(nèi)存”就是數(shù)據(jù)接口NSAutoreleasePool的空間; 2,“id objx”, 就是各個(gè)申請(qǐng)的對(duì)象指針; 3,next,指的是堆棧頂處; 對(duì)象是如何申請(qǐng)的?

圖中的情況,這一頁(yè)再加入一個(gè)autorelease對(duì)象就要滿了(也就是next指針馬上指向棧頂),這時(shí)就要執(zhí)行上面說(shuō)的操作,建立下一頁(yè)page對(duì)象,與這一頁(yè)鏈表連接完成后,新page的next指針被初始化在棧底(begin的位置),然后繼續(xù)向棧頂添加新對(duì)象。

所以,向一個(gè)對(duì)象發(fā)送- autorelease消息,就是將這個(gè)對(duì)象加入到當(dāng)前AutoreleasePoolPage的棧頂next指針指向的位置

對(duì)象是如何釋放的? 每當(dāng)進(jìn)行一次objc_autoreleasePoolPush調(diào)用時(shí),runtime向當(dāng)前的AutoreleasePoolPage中add進(jìn)一個(gè)哨兵對(duì)象,值為0(也就是個(gè)nil),那么這一個(gè)page就變成了下面的樣子:

objc_autoreleasePoolPush的返回值正是這個(gè)哨兵對(duì)象的地址,被objc_autoreleasePoolPop(哨兵對(duì)象)作為入?yún)?,于是?/p>

1.根據(jù)傳入的哨兵對(duì)象地址找到哨兵對(duì)象所處的page

2.在當(dāng)前page中,將晚于哨兵對(duì)象插入的所有autorelease對(duì)象都發(fā)送一次- release消息,并向回移動(dòng)next指針到正確位置

3.補(bǔ)充2:從最新加入的對(duì)象一直向前清理,可以向前跨越若干個(gè)page,直到哨兵所在的page

剛才的objc_autoreleasePoolPop執(zhí)行后,最終變成了下面的樣子:

嵌套的AutoreleasePool

知道了上面的原理,嵌套的AutoreleasePool就非常簡(jiǎn)單了,pop的時(shí)候總會(huì)釋放到上次push的位置為止,多層的pool就是多個(gè)哨兵對(duì)象而已,就像剝洋蔥一樣,每次一層,互不影響。

文章標(biāo)題:ARC的原理詳解-創(chuàng)新互聯(lián)
文章地址:http://aaarwkj.com/article36/pghpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、自適應(yīng)網(wǎng)站搜索引擎優(yōu)化、軟件開(kāi)發(fā)、建站公司定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
国产精品日韩一区视频| 中文字幕日韩欧美一区| 欧美日韩专区一区二区三区 | 成人三级中文字幕电影| 日韩欧美短视频在线观看| 国产一级成人免费视频| 国产精品大全中文字幕| 色橹橹欧美午夜精品福利| 精品裸足人妻少妇二区三区| 亚洲视频免费在线一区| 久久久久久国产综合精品| 免费精品99久久久国产| 久久精品国产一区二区三| 丰满少妇被激烈的插进去| 欧美精品亚洲二区中文乱码| 日韩精品高清视频在线观看| 婷婷91麻豆精品国产人妻| 成年人在线免费观看国产| 亚洲中文字幕av天堂久久| 久久国产福利一区二区| 91久久久久久人妻精品粉嫩| 强d乱码中文字幕在线| 一区二区三区四区四虎| 午夜精品一区二区三区亚洲| 国产一级黄色录像大片| 国产产品在线免费看91| 中文字幕av不卡一区| 久久东京热日韩精品一区| 九九国产精品免费视频| 中文字幕四虎在线观看| 亚洲天堂国产成人精品| 99精品人妻一区二区三区蜜桃| 五月婷婷丁香噜噜噜噜| 亚洲高清精品一区二区| 成人在线免费黄色小说| 91国产视频在线观看免费| 欧美欧美欧美欧美在线| 内射嫩国产欧美国产日韩欧美| 男人天堂插插综合搜索| 亚洲欧美日韩另类在线视频| 人妻有码av中文字幕久久|