Мне нужно добавить свойство указателя C ++ в мой класс Obj-C. Проект основан на ARC. Я хочу, чтобы в собственности были геттер и сеттер. Но выделение этого указателя C ++ не может управляться средой Obj-C, как я понимаю, поэтому мне нужно указать слабый указатель или что-то еще?
Указатели C / C ++, включая указатели на объекты C ++, не подчиняются ARC и обрабатываются аналогично другим примитивным типам, таким как целые числа. Для свойств это означает, что вы используете assign
, Например.:
@property (assign) int *intPtrValuedProperty
Вы должны управлять выделением и освобождением ссылочной памяти вручную, как в C / C ++.
Попробуйте следующее:
NSObject* arcObject = [[NSObject alloc] init];
void* arcObjectPointer = (__bridge void*)arcObject;
void* cObjectPointer = NULL;
NSObject* cObject = (__bridge NSObject*)cObjectPointer;
Поведение для объектов __bridge такое же, как и для объектов не-ARC. Используя __bridge, вы сообщаете ARC, что понимаете последствия и потенциальные опасности.