面試-- 內(nèi)存管理for (int i = 0; i < 1000000; ++i) {

什么時候需要手動創(chuàng)建自動釋放池?

1、如果在循環(huán)中創(chuàng)建了大量的臨時變量的時候需要在循環(huán)一開始就手動創(chuàng)建一個自動釋放池

2、如果你生成一個子線程的時候,要在線程開始執(zhí)行的時候,盡快創(chuàng)建一個自動釋放池.否則會內(nèi)存泄露.因為子線程無法訪問主線程的自動釋放池.

// 解讀:這段代碼有什么問題?
for (int i = 0; i < 1000000; ++i) {
    NSString *str = @"Hello World";
    str = [str stringByAppendingFormat:@" - %d", i];
    str = [str uppercaseString];
}

/*
問題:for循環(huán)里面創(chuàng)建了大量的臨時變量存儲在堆區(qū),雖然變量每次都出for循環(huán)的作用域,但不會被銷毀,因此會導(dǎo)致內(nèi)存暴漲。
*/

// 解決:每一次循環(huán)都加個自動釋放池,每次循環(huán)之后都釋放臨時變量。
    for (int i = 0; i < 100000000; ++i) {
        @autoreleasepool {
            NSString *str = @"Hello World";
            str = [str stringByAppendingFormat:@" - %d", i];
            str = [str uppercaseString];
        }
    }

// 注意:如果循環(huán)里面是基本數(shù)據(jù)類型,則不需要,它是系統(tǒng)自動管理的,出了作用域就釋放,我們只需要考慮“對象”即可
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容