Я пытаюсь передать ссылку на объект C ++ в Objective-C, чтобы я мог получить доступ к этому объекту из другого класса, в частности:
// ClassA
-(b2World *)getWorld{
return world;
}
В другом классе я бы назначил возвращенный объект ивару
// ClassB
-(void)initClassB{
world_ = [ClassA getWorld];
}
или напрямую получить доступ к методу возвращаемого объекта
// Classb
-(void)doSomething{
[[ClassA getWorld] doSomething];
}
Правильно ли, что в обоих случаях объект c ++ (b2World) скопирован и что мне нужно вручную разблокировать скопированный объект в среде ARC? Если это так, какова лучшая практика для передачи объектов с ++ в ARC (право собственности на переданный объект не должно передаваться, например, это должна быть слабая ссылка)?
Спасибо за любую помощь.
Вы не возвращаете объект. Вы возвращаете указатель. Копирование не происходит нигде.
Кроме того, ваш третий пример кода никогда не будет работать, потому что вы сказали b2World
это объект C ++, то есть он не может отвечать на сообщения obj-c.
Кроме того, ARC не влияет на семантику C ++ (кроме случаев, когда вы встраиваете объекты obj-c в качестве переменных-членов объектов C ++).
Других решений пока нет …