私はもちろん「私はココアタッチでガベージコレクションを利用できない理由」を意味するわけではありません。 Objective-Cは2.0のリリース以来、Cocoa TouchはGCを持っていません。これは言語だけに依存しませんか?なぜObjective C 2.0ではGarbage Collectionが利用可能ですが、Cocoa Touchでは使用できないのですか
答えて
ガーベジコレクションがiOSで利用できない理由を本当に尋ねることはありません。むしろ、あなたはに質問していますガベージコレクションは時には言語で利用可能であることがあります。
1つのレベルでは、答えは簡単です。 Appleは、iOSのランタイムにガベージコレクションされたコードを含めなかっただけです。基本的には、ガベージコレクションを実装するMac上で動作するコードがあります。このコードはiOSでは「不足しています」。コンパイラ自体はおそらく多少異なるかもしれませんが、それはコンパイラにコードを書くことの単なる問題です:if(COMPILING_TO_GC)
基本的に、Appleは別の方法でコンパイルし、別のランタイムを提供することでそれを行います。
もっと哲学的なレベルでは、これらは本当に同じ言語ですか? iOSのObjective-CはObjective-C for Macと同じ言語ではないと主張できます。 iOSでのガベージコレクションの欠如は、言語の意味を大きく異ならせます。だから、あなたはそれを非常によく似ているが、微妙なセマンティクスを持つ2つの異なる言語として見ることができます。
実際のレベルでは、自動参照カウント(ARC)の導入により言語間の相違が緩和されています。これにより、参照カウントを使用して自動的にメモリ管理が行われます。その効果は、iOSには弱い形式のガベージコレクションがあることです。結果として、セマンティクスはさらに微妙に異なります。
ios 5(および4.3ポイントまで)の時点で、Cocoa Touchには自動参照カウントがあります。基本的にコンパイラはあなたが望むなら、あなたのためにリリースリリースを保持します。しかし、それはプラットフォームに依存する言語に依存しません。
AppleがMac GCを使用しなかった理由はかなり簡単です.iosデバイスには多くのメモリがありません.Mac GCはJavaのように他のものほど良くはありません。
サイドノート:iOSのメモリ管理モデルに近いジャークのWTF反応があるのは簡単ですが、それをうまく学習し、良い方法であるdevのパワー/コントロールがありますCおよび下位レベルのプログラミングに伴うメモリ管理の問題に取り入れられます。
私はそれにも同意します。自分自身もメモリ管理を制御したいのです。 –
ありがとうございました。 –