我想在Objective类中声明一个C++属性。
我应该把它设置成什么样的属性?strong或retain似乎会导致错误,说明它不是对象。
我怎样才能妥善管理它的记忆呢?
发布于 2018-08-30 03:34:40
您是对的,属性不能是weak、strong或retained;因为它必须是一个指向object对象的指针。如果您不对C++属性使用任何属性,它将默认为unsafe_unretained,assign,atomic。
假设object (++)对象控制C++属性的生存期,还需要考虑其他几点:
atomic,所以您需要在setter中使用同步,并且也需要一个自定义getter。您可以声明它为nonatomic,在这种情况下,您不需要同步,也不需要自定义getter。dealloc,以确保在对象- C++对象离开时释放C++对象。以下是来自苹果的一些有用的文档:https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html。
下面是一个简单的例子。假设您为该属性使用的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文件中;请记住,它的目标是-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发布于 2018-08-28 22:06:44
IIRC,您需要像任何其他C++对象一样管理它,所以只需使用assign作为属性,您就应该很好。
https://stackoverflow.com/questions/52064094
复制相似问题