1

カスタム オブジェクトの NSMutableArray の割り当て解除についてサポートが必要です。配列を保持する必要があるため、.h にプロパティを追加し、.m ファイルの dealloc で解放します。配列にオブジェクトを追加するときは、次のようにします。

  myarray = [[NSMutableArray alloc] init];
  [myarray addObject:[[mycustomObject alloc]initWithObject:obj1]];
  [myarray addObject:[[mycustomObject alloc]initWithObject:obj2]];

さて、mycustomobject を解放する方法がわかりません。私が次のことをした場合:

   [myarray addObject:[[[mycustomObject alloc]initWithObject:obj1] autorelease]];

後でアレイにアクセスすると、問題が発生します。ご意見をお聞かせください。

4

2 に答える 2

5

Cocoa のメモリ管理がどのように機能するかを理解していないと思います。配列は追加したオブジェクトを保持し、配列がそれらを必要としなくなったとき (配列を解放するときなど) にそれらを自動的に解放します。

つまり、自動解放されたオブジェクトを配列に追加し、その後の保持カウントについて心配する必要はありません。配列から削除したい場合は、単純に削除します(removeObjectAtIndex:または同様のものを使用して)。配列からオブジェクトを削除せずにオブジェクトを解放したい場合は、何か間違ったことをしている可能性があります。これは、後でクラッシュする原因となるダングリング ポインターが配列に残る可能性があるためです。

ドキュメント、特にObject Ownership and Disposalのセクションをもう一度確認する必要があります。

于 2010-03-17T19:10:18.200 に答える
3

これを行う適切な方法は、カスタム オブジェクトの所有権を配列に維持させることです。

NSMutableArray * array = [[NSMutabelArray alloc] init];

for (id obj in anArrayOfObjects) {
  mycustomObject * customObj = [[mycustomObject alloc] initWithObject:obj];
  [array addObject:customObj];
  [customObj release];
}

後で配列にアクセスするのに問題がある場合は、配列のメモリ管理に問題があります。

于 2010-03-17T19:11:50.580 に答える