Objective-C:如果我在ARC的函数中返回一个c++对象,它会创建一个副本吗?我是否必须手动释放该副本?



我试图在Objective-C中传递对c++对象的引用,因此我可以从另一个类访问该对象,特别是:

// ClassA
-(b2World *)getWorld{
    return world;
}

在另一个类中,我要么将返回的对象赋值给ivar

// ClassB
-(void)initClassB{
    world_ = [ClassA getWorld];
}

或直接访问返回对象

的方法
// Classb
-(void)doSomething{
    [[ClassA getWorld] doSomething];
}

在这两种情况下,c++对象(b2World)被复制,我必须在ARC环境中手动释放复制的对象,这是正确的吗?如果是这样,在ARC中传递c++对象的最佳实践是什么(传递对象的所有权不应该被转移,例如,它应该是一个弱引用)?

谢谢你的帮助

您没有返回一个对象。你在返回一个指针。任何地方都没有复制。

同样,您的第三个代码示例将永远无法工作,因为您说b2World是一个c++对象,这意味着它不可能响应obj-c消息。

同时,ARC不会影响c++的语义(除非你将obj-c对象作为c++对象的成员变量嵌入)。

最新更新