【发布时间】:2014-10-01 22:00:17
【问题描述】:
考虑这个代码示例:
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 变量永远不会被释放。您可以使用 Instruments 进行检查 - 额外的保留计数器增量发生在 -(id)init 调用中。
我从没想过 C++ 类中的属性很强大,这让我想知道 - 有没有办法让指向 Objective-C 对象的 c++ 属性变弱?
更新:
有一种方法可以避免这种情况,在 C++ 类中使用指向 void 的指针而不是 NSObject* 并在 -(id)init 方法中初始化 C++ 类:
...
_plusPlusObject = new SomeArbitrarilyNamedClassPlusPlus((__bridge void*)self);
...
但是,问题仍然存在 - 有没有办法将 Objective-C 类型保存在 C++ 类中但使其变弱?
【问题讨论】:
-
那是不是 C++...
标签: objective-c objective-c++ retaincount strong-references