-2

重複の可能性:
CocoaとObjective-Cを使用した参照カウントの理解

私はiPhoneプログラミングとObjectiveCのメモリ管理の概念にかなり混乱しています。これはiPhoneアプリのパフォーマンスに最も役立つ概念です。いつ使うべきか知りたい

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];

[obj dealloc]

保持の使用は何ですか?これはretainCountを1増やすだけです。それは私にとって本当にオーバーヘッドです。保持カウントがメモリの管理にどのように役立つか。これから私を助けてください。

4

5 に答える 5

1

dealloc メソッドを呼び出さないでください...自動解放プールは、スレッド環境やその他の場所でも使用されます..

1つのことはios 5+にあります。retainについて心配する必要はありません。これらすべてのものを解放します..ARCがすべてを処理します

于 2012-11-07T11:54:05.513 に答える
1

Apple.developerのメモリ管理の基本から始める必要があります。

読み取りメモリ管理

メモリ管理ポリシーの読み取り

ここからドキュメントをダウンロード

于 2012-11-07T11:57:31.403 に答える
0

新しいスレッドを作成するときは、独自の自動解放プールを作成する必要があります。

電話しないでください[obj dealloc]

保持、解放、およびその他のメモリの概念については、以下を参照してください。MemoryManagement これらの2つのチュートリアルを参照してください。概念をよりよく理解するのに役立ちます:

  1. ios-memory-management-basics
  2. メモリー管理-in-objective-c-tutorial
于 2012-11-07T11:52:55.140 に答える
0

保持カウント > 0 は、オブジェクトがまだ使用されていること、他のオブジェクトまたはその所有者によってまだ必要とされていることなどを自動解放プールに示します。このカウントがゼロに達すると、それは自動的にオブジェクトが不要になったことを意味します。だから解放される。一般に、各 alloc/init、copy、create、retain には、同等の release/autorelease が必要です。

[obj dealloc] も良い方法ではありません。推奨される使用方法は、[obj release] または [obj autorelease] です。

于 2012-11-07T11:53:56.553 に答える
0

参照カウント環境 (ガベージ コレクションを使用する環境とは対照的) では、NSAutoreleasePool オブジェクトには自動解放メッセージを受信したオブジェクトが含まれ、排出されると、それらの各オブジェクトに解放メッセージが送信されます。したがって、リリースの代わりに autorelease をオブジェクトに送信すると、少なくともプール自体が空になるまで、そのオブジェクトの有効期間が延長されます (オブジェクトが後で保持される場合は、より長くなる可能性があります)。オブジェクトは同じプールに複数回入れることができます。その場合、オブジェクトはプールに入れられるたびに解放メッセージを受け取ります。

ClassA *a = [[ClassA alloc]init]; ここで、a の保持カウントは 1 で、a の所有者は 1 人だけです。[保持]; 現在、a の保持カウントは 2 で、所有者は 2 人です。

ここで、「a」オブジェクトを 2 回解放する必要があります。そうしないと、メモリリークが発生します

于 2012-11-07T11:59:02.373 に答える