2014-03-19 13 views
3

例如,如果你創建自己的GCD的隊列:每個自定義GCD隊列在ARC下需要一個自動釋放池嗎?

self.renderQueue = dispatch_queue_create("com.test.queue", DISPATCH_QUEUE_SERIAL); 

在提交給該隊列每個塊創建一個自動釋放池,使用:

@autoreleasepool { 

} 

或者ARC是否爲您創建它?如果您不在自定義隊列中指定autoreleasepool,會發生什麼情況?

+0

如果你使用Realm,那絕對是推薦的。 – EpicPandaForce

+0

查看我的答案更新了iOS 10+ [這裏](https://stackoverflow.com/a/47543034/285659) – ribeto

回答

6

這取決於您對自動釋放對象的使用情況。

每個GCD線程都有一個最外層的自動釋放緩衝池,但是這個緩衝池在您無法直接控制的時候耗盡(當前線程變爲空閒狀態時就會發生流失,就在它將內核停放在內核中等待重用或收穫之前)。

如果您的進程使GCD線程長時間保持活動狀態並且/或者如果在塊中創建大量自動釋放對象(或非常大的自動釋放對象),您可能希望在塊中創建一個池以確保這些對象佔用的資源更早釋放。