Advanced Autorelease Pool 高級自動釋放池
在之前的章節(jié)你已經(jīng)學(xué)習(xí)了很多基本的內(nèi)存方面的知識。這個部分將會涉及到使用自動釋放的高級技術(shù),同時展示你應(yīng)該在哪里使用,從而在受限的情況下獲得比較高的性能。
在每一個線程中,你應(yīng)該要有一個自動釋放池來收集和存儲所有自動釋放的對象。如果在每一個線程中,沒有自動釋放池的話,所有的autoreleased對象會泄露,你將會有一個重大的內(nèi)存泄露。自動釋放池是通過棧的形式組織在一起的;下面部分會解釋。
自動釋放池和棧
自動釋放池存儲在一個棧中,通常被理解成嵌套的。無論何時你創(chuàng)建一個新的自動釋放池,它都會被push到棧的頂部。然后所有新的autoreleased對象會被push到這個新的自動釋放池中。
通過下面的代碼你可以看到,對象(比如myArray和myString)內(nèi)部的方法doSomething將會存儲在myPool中,而不是應(yīng)用的main pool中:
- (void)doSomething {
@autoreleasepool {
NSArray *myArray = [NSArray array];
NSString *myString = [NSString string];
}
}
這是main方法的main pool:
int main(int argc, char *argv[]){
@autoreleasepool {
int retVal = UIApplicationMain(argc, argv, nil, nil);
}
return retVal;
}
在@autoreleasepool塊結(jié)束的時候,當(dāng)時間生命周期結(jié)束時,所有存儲在這個pool中的autoreleased對象jiang將被released。
圖7-9展示了這個概念。對于一個好的性能來說,這是一個非常重要的概念 -- 知道盡可能快的release對象。
自動釋放池和線程
當(dāng)創(chuàng)建一個新的線程時,你需要創(chuàng)建一個新的自動釋放池對象,然后將這個pool和新的線程聯(lián)系在一起。因此當(dāng)線程停止時,你的自動釋放池會deallocated,所有的autoreleased對象也會deallocated。第6章我會深入的討論這個主題,所以你應(yīng)該復(fù)習(xí)一下,如果你在理解概念時需要一些幫助的話。
自動釋放池對性能的影響
舊的內(nèi)存管理規(guī)則依然能夠應(yīng)用在用ARC編寫的代碼上,如果你沒有使用new,alloc和copy調(diào)用一個方法,這個對象就已經(jīng)是autoreleased了。如果你在一個循環(huán)中創(chuàng)建了很多的autoreleased對象,很快內(nèi)存就會耗盡。
這個代碼演示了在循環(huán)中處理內(nèi)存管理最好的方法:
- (void)doSomethingWithAutoRelease {
for (int i = 0; i < 1000; i++) {
@autoreleasepool {
Product *product = [Product productWithItemID:@""];
// process and display the product here
}
}
}
在循環(huán)結(jié)束的時候,以及在@autoreleasepool塊的尾部,所有的autoreleased對象會released。這種方法你能夠控制和release所有位使用的對象和回收你的內(nèi)存。
Instruments
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前名稱:iOS優(yōu)化內(nèi)存,提升性能之五-創(chuàng)新互聯(lián)
URL分享:http://chinadenli.net/article42/ddijec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、全網(wǎng)營銷推廣、網(wǎng)站營銷、品牌網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容