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

Szi*_*lto 1 c++ memory-management objective-c objective-c++ automatic-ref-counting

我试图在Objective-C中传递对C++对象的引用,所以我可以从另一个类访问该对象,具体来说:

// ClassA
-(b2World *)getWorld{
    return world;
}
Run Code Online (Sandbox Code Playgroud)

在另一个类中,我将返回的对象分配给ivar

// ClassB
-(void)initClassB{
    world_ = [ClassA getWorld];
}
Run Code Online (Sandbox Code Playgroud)

或者直接访问返回对象的方法

// Classb
-(void)doSomething{
    [[ClassA getWorld] doSomething];
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助.

Lil*_*ard 5

你没有归还一个物体.你正在返回一个指针.任何地方都没有复制.

此外,您的第三个代码示例将永远不会工作,因为您说b2World是一个C++对象,这意味着它不可能响应obj-c消息.

此外,ARC不会影响C++的语义(除非将obj-c对象嵌入为C++对象的成员变量).