0

次のコードを見ました

   UIAlertView *alert = 
   [[UIAlertView alloc] initWithTitle :@”Hello World!” 
                                   message:@”iPhone, here I come!”  
                                  delegate :self
                         cancelButtonTitle:@”OK” 
                         otherButtonTitles:nil ];
   [alert show];
   [alert release];

毎回 release を呼び出す必要がありますか、または Java や .NET のガベージ コレクションのようにメモリを自動的に管理する方法はありますか?

4

3 に答える 3

3

ARC (Automatic Reference Counting) を使用できます。これはガベージ コレクションではなく、開発者がメモリ管理を気にしないようにする一種のコンパイラ機能です。

この質問とこのリンクをチェックしてください

簡単に言えば、ARC は手動参照カウント (MRC) に似ており、コンパイラが保持/解放をいつ呼び出すかを判断します。

非 ARC プロジェクトを変換して、XCode から ARC を使用することもできます ([編集] -> [リファクタリング] -> [Objective-C ARC に変換])。ARC を使用しないようにプロジェクト/ファイルを選択的に設定することもできます (サード パーティ コードなど)。

于 2012-07-07T11:45:11.523 に答える
1

Java.NETガベージ コレクションされ、独自の仮想環境で実行されるプラットフォームです。Objective-Cの上に構築されC、メモリ管理は開発者によって処理されます。Apple はAutomatic Reference Counting( ARC) と呼ばれるものを導入しました。これは、オブジェクトへのポインターを持たないオブジェクトを解放しますが、いずれにせよARCガベージ コレクションとは異なります。ARCしたがって、メモリ管理のルールと/または正しく使用する方法を読む必要があります...

于 2012-07-07T11:47:06.010 に答える
0

他の答えは確かに正しいです。手動のメモリ管理を行う場合:名前が「alloc」、「copy」、「new」、または「mutableCopy」で始まるメッセージによって取得されたオブジェクトを解放するだけで済みます。メッセージから返される他のすべてのオブジェクトはあなたが所有しているわけではなく、解放する必要はありません。それらのほとんどは自動リリースプールに追加されます。また、その規則に従い、常に自動解放されたオブジェクトを返す必要があります(上記の例外に関して)。

編集:ああ、もう1つ:この自動解放動作のため、保持したいオブジェクトをクラスの保持プロパティに割り当てるか、[保持]を使用して手動で実行することにより、保持する必要があります。これらの3つのルールに従い、覚えておくと、うまくいくことができます。

于 2012-07-07T12:49:31.747 に答える