当我尝试构建项目时,我遇到了一个新错误,其中使用了objc_retainedObject()
。
我收到错误消息objc_retianedObject is unavailable: use CFBridgingRelease() or a (__bridge_transfer id) cast instead
。
我将objc_retainedObject()
的用法替换为CFBridgingRelease
并且不再有错误,我可以运行该应用,但是当应用程序要显示我的QRCode扫描视图时,它会在没有消息的情况下崩溃。
当我把#define objc_retainedObject(o) ((__bridge_transfer id)(objc_objectptr_t)(o))
作为解决方案时,它是一样的。
我相信它是一个XCode配置或缺少库问题。有什么想法吗?
答案 0 :(得分:2)
不要重新创建objc_retainedObject
。它是故意删除的。 CFBridgingRelease
和CFBridgingRetain
是将CF对象移动到ARC的正确工具。 (__bridge
是处理CF对象的工具,因为您没有存储它们,所以不需要将它们传输到ARC。)
如果你的程序崩溃了,你可能错误地管理了内存。 objc_retainedObject
可能不正确(即使您碰巧侥幸逃脱)。将CF对象传输到ARC时,请参阅when should you use __bridge vs. CFBridgingRelease/CFBridgingRetain?以了解正确的内存管理。
在不了解代码的情况下,我无法准确猜出你犯了哪个错误,但你可能正在调用CFBridgingRelease
对象是你未通过Create Rule获取的对象。您不只是在遇到的每个CF对象上抛出CFBridgingRelease
。您需要确保平衡现有的保留。