5

MeetingUser C++ クラスがあります。new_meetingUser はそのオブジェクトです。

NSValue を使用して行った NSMutableArray meetingUsersList に追加したいと思います。ただし、オブジェクトのメモリと NSMutableArray の所有権を処理する方法がわかりません。

MeetingUser *new_meetingUser = new MeetingUser(userName, dispName );
[meetingUsersList addObject:[NSValue valueWithPointer:new_meetingUser]];
4

4 に答える 4

3

このように C++ オブジェクトを配列に追加できますが、配列はオブジェクトの所有権を取得しません。オブジェクトが配列内にある間はオブジェクトが削除されないようにする必要があります。そうしないと、ダングリング ポインターになります。その後、オブジェクトを削除しても安全であることがわかったら、手動でオブジェクトを削除する必要があります。

配列にオブジェクトの所有権を持たせたい場合は、CFMutableArray. CFMutableArrayオブジェクトが配列から削除されたとき、または配列の割り当てが解除されたときに呼び出される関数を指定できます。あなたの場合、オブジェクトCFMutableArrayを呼び出すよう に設定deleteします。

于 2012-06-07T05:57:32.750 に答える
1

基本的に、できません。C++ オブジェクトと Objective-C オブジェクトは、どちらも「オブジェクト」と呼ばれていますが、まったく別のものです。NSArray は、Objective-C オブジェクトのみを保持できます。プリミティブ、構造体、C++ オブジェクト、または Objective-C オブジェクト以外のものを保持することはできません。最善の回避策は、C++ クラスをラップする Objective-C クラスを作成し、それを配列に格納することです。

于 2012-06-07T05:58:04.710 に答える
1

1 つの方法は、小さな ObjC クラスを作成して C++ オブジェクトをラップすることです。これは、必要に応じて単純にすることも複雑にすることもできます。必要な唯一の主な作業は、C++ オブジェクトをフィールドに格納しdeletedealloc.

于 2012-06-07T05:58:49.747 に答える