Безопасно ли использовать соответствующие вызовы CFBridging для передачи в ARC и из ARC для типов без CF?

Я пишу игру, используя физический движок Бурундука, и я хотел бы хранить указатель на объект Objective-C в каждом теле userData поле. Я знаю, что мне нужно использовать бросающий мост между id а также void *, но я не уверен, что то, как я это делаю, безопасно:

// When body is created
cpBody *body = cpBodyNew(...);
UserData *userData = [[UserData alloc] init];
cpBodySetUserData(body, CFBridgingRetain(body));

...

// When body is destroyed
UserData *userData = cpBodyGetUserData(body);
CFBridgingRelease(userData);
cpBodyFree(body);

Этот код, кажется, работает, но я также читал, что вы должны использовать только CFBridging*() на объектах, которые можно бесплатно соединить с базовыми типами. поскольку UserData происходит от NSObject, а также NSObject нет в списке бесплатных мостовых типов, похоже, я нарушаю это правило.

Мой код в порядке, потому что я в конце концов позвоню CFBridgingRelease и не пытайтесь передать объект каким-либо другим функциям Core Foundation или есть другой способ переноса объектов Objective-C в и из C?

1 ответ

Решение

Это безопасно. NSObject бесплатно соединяется с общим CFTypeRef, Кроме того, я предполагаю, что вы не вызываете какие-либо другие функции Core Foundation на void*так что это вряд ли имеет значение.

Другие вопросы по тегам