搜尋

首頁  >  問答  >  主體

objective-c - 既然設定了ARC,為什麼還要使用@autoreleasepool

1.既然設定了ARC,為什麼還需要@autoreleasepool,有什麼好處?
池子做的是運行時延遲釋放,ARC已經在編譯時解決了手動管理的問題,那麼就沒必要使用@autoreleasepool,還佔記憶體。
2、ARC頻繁釋放記憶體 和@autoreleasepool一起釋放 感覺還是前者 要好些,
這不是像資料連接池一樣可以共享資源。只是延遲釋放記憶體(又不能共享記憶體)。

按著這個推論在ARC條件下,沒必要使用@autoreleasepool。

我知道這種想法有問題,但不知道是哪裡,新手問題多,莫噴

巴扎黑巴扎黑2835 天前451

全部回覆(2)我來回復

  • ringa_lee

    ringa_lee2017-04-24 09:12:51

    ARC 並不是捨棄了 @autoreleasepool,而是在编译阶段帮你插入必要的 retain/release/autorelease 的程式碼呼叫。

    所以,跟你想像的不一樣,ARC 之下依然是延時釋放的,依然是依賴於NSAutoreleasePool,跟非ARC 模式下手動調用那些函數本質上毫無差別,只是編譯器來做會保證引用計數的正確性。

    參考:

    • Retain count semantics in ARC
    • What's @autoreleasepool

    回覆
    0
  • 迷茫

    迷茫2017-04-24 09:12:51

    用@autoreleasepool是有用的。
    正常情況下,你所建立的變數會在超出其作用域的時候被釋放掉。
    而如果你的函數寫的很長,在你函數運行過程中出現很多中間變量,佔據了大量的內存,怎麼辦?
    用@autoreleasepool。
    在@autoreleasepool中創建的變量,會在@autoreleasepool結束的時候執行一次release,進行釋放。其實@autoreleasepool就相當於一層作用域。

    回覆
    0
  • 取消回覆