Цель-C: Если я верну объект C ++ в функции в ARC, создаст ли он копию, и нужно ли мне вручную выпускать эту копию?

Я пытаюсь передать ссылку на объект C ++ в Objective-C, чтобы я мог получить доступ к этому объекту из другого класса, в частности:

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

В другом классе я бы назначил возвращенный объект ивару

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

или напрямую получить доступ к методу возвращаемого объекта

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

Правильно ли, что в обоих случаях объект c ++ (b2World) скопирован и что мне нужно вручную разблокировать скопированный объект в среде ARC? Если это так, какова лучшая практика для передачи объектов с ++ в ARC (право собственности на переданный объект не должно передаваться, например, это должна быть слабая ссылка)?

Спасибо за любую помощь.

1

Решение

Вы не возвращаете объект. Вы возвращаете указатель. Копирование не происходит нигде.

Кроме того, ваш третий пример кода никогда не будет работать, потому что вы сказали b2World это объект C ++, то есть он не может отвечать на сообщения obj-c.

Кроме того, ARC не влияет на семантику C ++ (кроме случаев, когда вы встраиваете объекты obj-c в качестве переменных-членов объектов C ++).

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector