質問

ココアタッチプラットフォームでアプリケーションを開発することを学んでいます。私は長い道のりを歩んできましたが、頭を包み込むことができないのはメモリ管理です。

ゼロから始めようとするのではなく、比較のルートを取ると思った。 CLR(.net)とObjective-C 2.0の違いについてはあまり見当たらないので、スタックオーバーフローコミュニティがこの質問に役立つかどうか疑問に思っています。

Objective-C 2.0とCLRのメモリ管理における重要な/重要な違いは何ですか? Objective-C 2.0に関しては、iPhone OSで開発していますが、自動リリース機能はお勧めしません。

この2つの比較を探していると思います...私は.NETのバックグラウンドから来ているので、Objective-C 2.0のメモリ管理について知っておくべきことは何ですか?

ありがとうございます!

役に立ちましたか?

解決

CLRは仮想マシンで実行されます。オブジェクトのすべての割り当て解除は、ガベージコレクションシステムによって処理されます。一般に、Objective-Cのメモリは、古いCスタイルのmalloc / freeまたはretain / releaseの参照カウントシステムを介して手動で管理する必要があります。標準の「C」から来ている場合背景、技術はあまりにも外国のようには見えません。

参照カウントでは、システムは特定のオブジェクトが使用された回数をカウントします。これは基本的に「保持」です。上記の通り。オブジェクトを使用して何かが行われると、オブジェクトは手動で「リリース」を送信します。オブジェクトの保持カウントを1ずつ減らすメッセージ。カウントが0に達すると、システムは自動的にオブジェクトの割り当てを解除します。これは、CLR / .NETと比較して非常に面倒に思えますが、そのメカニズムによりパフォーマンスが向上し、制御が向上します。

MacintoshのObjective-C 2.0でコーディングしている場合、XCodeのオプションを使用してガベージコレクションを有効にできるため、幸運です。これは、CLRが提供するものに近くなります。 iPhoneで開発している場合、メモリとCPUの点でガベージコレクションのコストが高すぎるため、オプションではありません。メモリは手動で管理する必要があります。

幸いなことに、送信と「自動解放」で一般的に使用される中間オプションがあります。オブジェクトへのメッセージ。 MacintoshとiPhoneの両方に含まれるこのメカニズムは、基本的に割り当てられたオブジェクトをグローバルディクショナリにプールします(実際には自動解放プールと呼ばれます)。アプリケーションが存在するとき、またはプールが空になったときに、オブジェクトの割り当てが解除されます。ただし、すべてが自動解放プールに入るわけではなく、すべてをそこに置きたいわけでもありません。 AppleのサイトからObjective-C 2.0プログラミング言語のドライで重要な読み方をお読みになることをお勧めします。詳細についてはこちらをご覧ください。

http://developer.apple.com/documentation /Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html

がんばって忍耐を。 Objective-Cは、.Net(25歳以上)のようなブロックの新しい子供ではありませんが、.Netが取り入れ始めたいくつかの素晴らしい機能を備えています。

他のヒント

iPhoneでは手動です。メモリを割り当てるか保持する場合は、解放する必要があります。

iPhoneの場合、すべてのオブジェクトの割り当て、初期化、またはリリースとのバランスを取る必要があります。 iPhoneは単純な参照カウントメカニズムを使用しているため、カウントが0になるとオブジェクトはクリーンアップされます。

慣れるのに必要なことの1つは、自動的に保持するプロパティを設定できることです。そのため、オブジェクトを作成してプロパティに割り当てると、カウントは2になります。オブジェクトを一時変数に割り当ててプロパティに割り当て、一時変数を解放してカウントを1に減らします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top