iOS中autoreleasepool的理解和使用

2021-07-30 04:20:24 字數 795 閱讀 6778

面試經常會有這樣的問題:

1.什麼是@autoreleasepool?

2.裡面物件的記憶體什麼時候釋放?

3.什麼時候要用@autoreleasepool?

回答:

1.@autoreleasepool是自動釋放池,讓我們更自由的管理記憶體

2.當我們手動建立了乙個@autoreleasepool,裡面建立了很多臨時變數,當@autoreleasepool結束時,裡面的記憶體就會**

3.arc時代,系統自動管理自己的autoreleasepool,runloop就是ios中的訊息迴圈機制,當乙個runloop結束時系統才會一次性清理掉被autorelease處理過的物件,其實本質上說是在本次runloop迭代結束時清理掉被本次迭代期間被放到autorelease pool中的物件的。至於何時runloop結束並沒有固定的duration。

方便是方便了,但是有些情況下,我們還是需要手動建立自動釋放池,那麼,什麼時候呢?

這是蘋果文件中的翻譯,按我的理解,最重要的使用場景,應該是有大量中間臨時變數產生時,避免記憶體使用峰值過高,及時釋放記憶體的場景。

舉個例子

nsarray *urls = <# an array of file urls #>;

for (nsurl *url in urls)

}

這個for迴圈裡如果不使用@autoreleasepool,那臨時變數記憶體可能是爆發式的,但是使用了@autoreleasepool,在每個@autoreleasepool結束時,裡面的臨時變數都會**,記憶體使用更加合理。

autorelease銷毀時間

autorelease 何時銷毀呢?網上的回答是 每個run loop中都建立乙個autorelease pool,並在runloop的末尾進行釋放。對於每乙個autorelease,系統只是把該object放入了當前 runloop 的autorelease pool中,當該pool被釋放時,該p...

autorelease基本使用

autorelease是一種支援引用計數的記憶體管理方式,只要給物件傳送一條autorelease訊息,會將物件放到乙個自動釋放池中,當自動釋放池被銷毀時,會對池子裡面的所有物件做一次release操作 注意,這裡只是傳送release訊息,如果當時的引用計數 reference counted 依...

十二 oc中autorelease的基本使用

windows phone 7手機開發 ios培訓 期待與您交流!在前面的記憶體管理部落格中,提到過release方法,它是乙個物件方法,返回的是空值。autorelease方法也有著release方法有著大體相同的作用。注意 autoreleasepool這是oc中的乙個關鍵字,而autorele...