3
內對象考慮:ARC/ObjC++:C++的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
這是正確的做法,刪除C++的地面物體,當你與他們ARC下完成的?
感謝您的回答。你能否詳細說明「更多靈活性」一點? – verec 2012-01-17 17:33:30
創建您自己的每個實例包裝器可讓您像處理ObjC對象一樣處理C++對象。它可以讓你把它放到集合中,而不用擔心內存管理。它允許你從中獲取ObjC類型(特別是'NSString')。我強烈建議保持ObjC和C++代碼儘可能分離,只有一層薄薄的ObjC++來粘合它們。這些對象包裝就是那個膠水。 – 2012-01-17 18:03:07