我想在我的Objective-C类中声明一个C++属性。应该设置什么样的属性?似乎strong或retain会导致错误,提示它不是一个对象。我该如何正确地管理其内存?
weak
、strong
或retained
;否则它必须是指向Objective-C对象的指针。如果在C++属性上不使用任何属性,则默认为unsafe_unretained,assign,atomic
。atomic
,因此需要在setter中使用同步,并且还需要自定义getter。也可以将其声明为nonatomic
,这样就不需要同步,也不需要自定义getter。
- 可以实现dealloc
来确保在Objective-C++对象消失时释放C++对象。以下是一个快速的示例。假设您正在使用的属性的C++类名为MyCPP
。在头文件中,您可以有:
@interface ClassOCPP : NSObject
// This property can only be used in Objective-C++ code
#ifdef __cplusplus
@property /*(unsafe_unretained,assign,atomic)*/ MyCPP * myCPP;
#endif
// Other stuff may be usable in regular Objective-C code.
@end
实现如下(在 .mm
文件中;记住,它是 Objective-C++):
@implementation ClassOCPP
{
MyCPP * _myCPP;
}
-(id)init {
self = [super init];
_myCPP = NULL;
return self;
}
-(void)setMyCPP:(MyCPP*)newVal {
@synchronized(self) {
delete _myCPP; // it's OK to delete a NULL pointer
_myCPP = newVal;
}
}
-(MyCPP*)myCPP {
return _myCPP;
}
-(void)dealloc {
puts("De-allocating ClassOCPP.");
delete _myCPP;
}
@end
assign
作为属性即可。