2012-03-29 121 views
1

我已經閱讀了這個從蘋果文檔..autorelease池到垃圾回收的連接是什麼?

在一個垃圾收集環境,釋放是一個無操作(一個無所事事的指令)。因此,NSAutoreleasePool提供了一種排除方法,在引用計數的環境中,其行爲與調用釋放相同,但在垃圾收集環境中會觸發垃圾回收(如果自上次收集以來分配的內存大於當前閾值)。因此,通常情況下,您應該使用drain而不是release來處理autorelease池。

,但沒有得到的

1)的含義是「自上次集合分配的內存比當前閾值」。

2)IOS是不支持的垃圾收集器然後是什麼與垃圾收集器的使用漏極中的?

+0

老兄,我可以有那個鏈接,請我想自己讀。 – WaaleedKhan 2012-03-29 17:35:44

+0

是的,上癮,你可以找到它https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html#//apple_ref/doc/uid/20000047-SW4 – PJR 2012-03-29 17:51:34

回答

1

1)這可能意味着GC會記得分配的內存量,並且下一次調用drain時將分配的內存量與上一次的量進行比較。只有當變化足夠大時才進行垃圾收集。

讓我以不同的方式解釋它:垃圾收集可能很昂貴,所以您需要決定何時收集。爲了避免不必要的工作,GC可能會記住集合運行後的內存量(例如,使用25MB)。現在GC在下一次考慮收集時,首先決定是否值得做所有的工作。例如,如果現在使用的內存量爲25.5MB,則可能不值得做任何事情。但是如果現在有50MB正在使用,收集是有用的。

2)這些東西來源於Mac,其中GC可用。爲了實現iOS和Mac OS X之間的代碼共享,這些看似不必要的方法仍然堅持在iOS上保持與Mac OS X的兼容性。我甚至懷疑這是由於iOS實際上是Mac OS X的「分支」並因此繼承了這些東西。

+0

和2)只有在需要共享ios和mac之間的代碼時,drain纔有用? – PJR 2012-03-29 17:55:19

+0

ane for 1)當我打電話漏,它將比較內存與最後一次amout或它將刪除這些內存? – PJR 2012-03-29 18:00:38

+0

@PJR:'drain'也是用ARC銷燬自動釋放池的唯一選擇(儘管你現在可能會使用'@ autoreleasepool'指令)。 – Chuck 2012-03-29 18:52:17