2010-09-16 68 views
3

MonoTouch在iPhone上自動收集垃圾。 有人不能過早地在iOS上爲Objective-C實現垃圾回收嗎?我不是那麼做,但我很好奇爲什麼或者這是不可能的。將垃圾收集添加到iPhone?

我知道像this這樣的項目存在:在iOS上使用它們需要什麼?因爲無論如何它們都是C/C++,Objective-C包含那些語言作爲子集,但是,這些語言實際上知道系統架構......我在這裏沒有深入...

雖然我們在這裏,如果有人知道在iOS上執行GC的任何嘗試,鏈接將有幫助...

+0

我也非常關心這個問題,MonoTouch如何做到這一點?它是否足夠好,電池壽命,性能... – vodkhang 2010-09-16 16:52:09

+0

嗨@vodkhang:簡短的回答是他們,嗯,在代碼中實現它。很長的答案是我不知道,但也有 - 這是標準算法。電池壽命如何,表現:不確定。這可能不如「本地」應用程序,但他們會被接受到商店,這是肯定的。如果它對蘋果來說足夠好,那對我來說已經足夠了。 – 2010-09-16 17:26:12

+0

我對此一無所知,但對於Apple在未來的iOS版本中包含垃圾收集功能沒有意義嗎? – 2010-09-16 21:49:33

回答

7

我不認爲這是可能的。問題是Objective-C也在系統庫中使用。在支持垃圾收集的Objective-C的OS X中,編譯代碼時實際上有三種模式:

  1. 編譯的函數只能從非GC環境調用。
  2. 編譯的函數只能從GC環境調用。
  3. 編譯的函數可以從GC和非GC環境中調用。

例如,參見討論here。重點在於系統庫需要處於第三種模式才能支持非GC和GC應用程序。在OS X中,庫進入這種混合模式。在iOS中,我想它是在模式1中進行的。(我不確定,因爲我沒有越獄我的手機,但是。)

如果您完全控制了系統庫和應用程序,有可能讓他們收集所有的垃圾,但不幸的是我們還沒有進入這個階段。

我確定我們兩年內會在iOS中使用GC。

+0

這基本上是破產者。我不認爲將OS X libauto垃圾回收器移植到iPhone上將會很困難,但它是沒用的,因爲系統庫不支持它。 – Chuck 2010-09-16 19:46:38

+0

此外,Mac上的垃圾收集器工作得相當好,因爲它可以在後臺線程上收集。在多核計算機上(現在所有運送Mac的計算機)都可以運行,而不會干擾主應用程序的性能。我們還沒有多核iOS設備,所以我希望只有在它們推出之後。 – 2010-09-16 20:19:48

+0

謝謝@Yuji,@Chuck,@Brad Larson ....我有點猜測它一定不容易,否則它已經作爲第三方庫存在。 MonoTouch團隊獲得GC(甚至對於框架類,我認爲)有多諷刺,而obj-c卻沒有。 – 2010-09-16 21:17:46

1

沒有什麼能阻止你爲你的應用程序構建自己的垃圾收集器。或者導入另一個處理它的項目。再次,爲您的應用程序。

更多的討論:

Is garbage collection supported for iPhone applications?

+0

謝謝。我有點希望得到一些關於如何去做的鏈接,而不是關於如何使用保留/發佈的更多信息。我已經拿到了保留/釋放的棕色腰帶。 – 2010-09-16 15:47:57

+0

好點。我絕對把你的問題看作更多關於哲學的東西。我想大部分你會得到的回覆將是前者而不是後者。無論如何,我認爲,添加一個c/C++ gc應該不會太多。我想你可以在沒有任何特別準備的情況下開始在你的項目中使用它們。 – 2010-09-16 15:55:10

+0

謝謝,這個問題可能是因爲我寫的時候坐在咖啡館的問題,所以你是對的。我猜,我應該試試這個,但是我不知道GC如何使用目標-c ref計數的東西。 – 2010-09-16 17:27:22