C++;对象作为目标-C++;财产 我想在ObjuleC类中声明C++属性。< /P>
我应该将其设置为什么类型的属性?似乎C++;对象作为目标-C++;财产 我想在ObjuleC类中声明C++属性。< /P>,c++,objective-c++,C++,Objective C++,我应该将其设置为什么类型的属性?似乎strong或retain会导致错误,说它不是对象 我如何管理内存?irc,你需要像其他C++对象一样管理它,所以只使用赋值< /C>作为属性,你应该是好的。< /P> < P>你是正确的,属性不能是代码>弱,强< /COD>,或者保留< /代码>;为此,它必须是指向Objective-C对象的指针。如果你不在C++属性上使用任何属性,它将默认为 unSaveIn保持,分配,原子< /代码>。 其他一些要考虑的事情,假设Objul-C(++)对象控制C++属性
strong
或retain
会导致错误,说它不是对象
我如何管理内存?
irc,你需要像其他C++对象一样管理它,所以只使用<代码>赋值< /C>作为属性,你应该是好的。< /P> < P>你是正确的,属性不能是代码>弱,<代码>强< /COD>,或者<代码>保留< /代码>;为此,它必须是指向Objective-C对象的指针。如果你不在C++属性上使用任何属性,它将默认为<代码> unSaveIn保持,分配,原子< /代码>。其他一些要考虑的事情,假设Objul-C(++)对象控制C++属性的生存期:
- 因为您必须自己管理属性的内存,所以 需要一个自定义设置器
- 由于属性默认为
,因此需要使用 在setter中进行同步,并且还需要自定义getter。你 可以声明它是非原子的,在这种情况下,您不需要 同步,不需要自定义getter原子属性
- 可以实现<代码> DELOLC/<代码>,以确保C++对象在释放时释放 Objective-C++对象消失了
属性在Objective-C++代码中非常有用,您可以在其中混合使用
ObjtoFe C和C++
@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++):
如果可能的话,一个简短完整的例子可能会有所帮助。听起来你的问题不仅仅是使用什么属性,而是更广泛的:如何管理C++对象的内存。是Objy-C类拥有的C++对象吗?Objective-C类实际上是Objective-C++吗?在Objy-C(不是Objul-C++)代码中,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