iOS中autoreleasepool的理解和使用

自動釋放池block,蘋果官方文檔:Using Autorelease Pool Blocks

面試經(jīng)常會有這樣的問題:
1.什么是@autoreleasepool?
2.里面對象的內(nèi)存什么時候釋放?
3.什么時候要用@autoreleasepool?

回答:

1.@autoreleasepool是自動釋放池,讓我們更自由的管理內(nèi)存

2.當(dāng)我們手動創(chuàng)建了一個@autoreleasepool,里面創(chuàng)建了很多臨時變量,當(dāng)@autoreleasepool結(jié)束時,里面的內(nèi)存就會回收

3.ARC時代,系統(tǒng)自動管理自己的autoreleasepool,runloop就是iOS中的消息循環(huán)機制,當(dāng)一個runloop結(jié)束時系統(tǒng)才會一次性清理掉被autorelease處理過的對象,其實本質(zhì)上說是在本次runloop迭代結(jié)束時清理掉被本次迭代期間被放到autorelease pool中的對象的。至于何時runloop結(jié)束并沒有固定的duration。
方便是方便了,但是有些情況下,我們還是需要手動創(chuàng)建自動釋放池,那么,什么時候呢?

  • 如果你正在編寫不基于UI 框架的程序,比如命令行工具。
  • 如果你編寫的循環(huán)創(chuàng)建了很多臨時對象。
    你可以在循環(huán)中使用自動釋放池block,在下次迭代前處理這些對象。在循環(huán)中使用自動釋放池block,有助于減少應(yīng)用程序的內(nèi)存占用。
  • 你生成了一個輔助線程。
    一旦線程開始執(zhí)行你必須自己創(chuàng)建自動釋放池。否則,應(yīng)用將泄漏對象。

這是蘋果文檔中的翻譯,按我的理解,最重要的使用場景,應(yīng)該是有大量中間臨時變量產(chǎn)生時,避免內(nèi)存使用峰值過高,及時釋放內(nèi)存的場景。
舉個例子

NSArray *urls = <# An array of file URLs #>;
for (NSURL *url in urls) {
    @autoreleasepool {
        NSError *error;
        NSString *fileContents = [NSString stringWithContentsOfURL:url
                                         encoding:NSUTF8StringEncoding
                                         error:&error];
    }
}

這個for循環(huán)里如果不使用@autoreleasepool,那臨時變量內(nèi)存可能是爆發(fā)式的,但是使用了@autoreleasepool,在每個@autoreleasepool結(jié)束時,里面的臨時變量都會回收,內(nèi)存使用更加合理。

最后編輯于
?著作權(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)容

  • 一、什么是runloop 字面意思是“消息循環(huán)、運行循環(huán)”。它不是線程,但它和線程息息相關(guān)。一般來講,一個線程一次...
    WeiHing閱讀 8,311評論 11 111
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,628評論 30 472
  • 好記性不如爛筆頭,勿在浮沙筑高臺,不積跬步無以至千里,做人做事要有安排有計劃。 內(nèi)存管理一直是學(xué)習(xí) Objecti...
    BigLuckyHaha閱讀 7,160評論 9 19
  • 文‖蒼穹一君 明天我要去打架了 今夜群魔亂舞 今夜我的斯文盡失 明天我要去打架了 沒有伙伴同行 沒有工具可用 明天...
    蒼穹一君閱讀 375評論 15 12
  • 從vcxvx
    damaox閱讀 139評論 0 1

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