-1
考虑以下代码例如:目标C++和物体保持
class SomeArbitrarilyNamedClassPlusPlus {
public:
SomeArbitrarilyNamedClassPlusPlus(NSObject *object) { object_ = object; }
SomeArbitrarilyNamedClassPlusPlus() { object_ = nil; }
private:
NSObject *object_;
};
@interface SomeArbitrarilyNamedClassObjective : NSObject
{
SomeArbitrarilyNamedClassPlusPlus *_plusPlusObject;
}
@end
@implementation SomeArbitrarilyNamedClassObjective
-(id)init
{
if ((self = [super init]))
{
_plusPlusObject = new SomeArbitrarilyNamedClassPlusPlus(self);
}
return self;
}
-(void)dealloc
{
NSLog(@"deallocated");
delete _plusPlusObject;
}
@end
int main(int argc, const char * argv[])
{
{
SomeArbitrarilyNamedClassObjective *object = [[SomeArbitrarilyNamedClassObjective alloc] init];
}
return 0;
}
的object
可变永远不会被释放。您可以使用仪器进行检查 - 在-(id)init
呼叫中会发生额外的保留计数器增量。
我永远不会期望C++类中的属性很强,这让我想知道 - 有没有办法让C++属性指向Objective-C对象很弱?
UPDATE: 还有就是要避免这种使用指针来void
在C++类的代替NSObject*
和初始化的C++类在-(id)init
方法那样的方法:
...
_plusPlusObject = new SomeArbitrarilyNamedClassPlusPlus((__bridge void*)self);
...
然而,问题仍然存在 - 有没有办法在C++类中保存Objective-C类型,但使它们变弱?
之所以如此,是** **不是C++ ... – Deduplicator 2014-10-01 22:03:44