内部のC++オブジェクトは、考えてみましょう:ARC /にObjC++:にObjCコンテナ
class SomeCppClass {
public:
SomeCppClass() {} ;
~SomeCppClass() {} ;
} ;
@interface Test1 : NSObject
- (id) init ;
@property (strong, nonatomic) NSMutableArray * container ;
@end
@implementation Test1
@synthesize container ;
- (id) init {
if (self = [super init]) {
container = [NSMutableArray arrayWithCapacity:10] ;
[container addObject:[NSValue valueWithPointer:new SomeCppClass()]] ;
}
return self ;
}
- (void) dealloc {
for (NSValue * v in container) {
SomeCppClass * c = (SomeCppClass *) [v pointerValue] ;
delete c ;
}
}
@end
が、これはあなたがARCの下で彼らと終わったらC++土地のオブジェクトを削除するための正しいアプローチですか?
ご回答ありがとうございます。あなたは "より柔軟性"のビットを詳述できますか? – verec
独自のインスタンスごとのラッパーを作成すると、C++オブジェクトをObjCオブジェクトのように扱うことができます。これにより、メモリ管理を心配することなくコレクションに入れることができます。 ObjCの型を取り出すことができます(特に 'NSString')。 ObjCとC++のコードをできるだけ別々にし、ObjC++の薄いレイヤーを貼り付けることを強くお勧めします。これらのオブジェクトラッパーはその接着剤です。 –