作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 ivar
,它是 CFURLRef
结构的“普通”C 数组。我称之为 sourceURLArray
。我将其初始化为容纳六个元素。
后来,在一个函数中,我创建(alloc/init)一个 NSURL*
对象。我将其称为 fileURL
,我想将该对象的副本保存到上述数组的第一个元素中。我以为我需要做的就是这样:
sourceURLArray[0] = (__bridge CFURLRef)([fileURL copy]);
但是,当我执行代码时,我第二次通过该函数收到发送到已释放实例的消息消息。检查变量后,上面的行执行后,sourceURLArray[0]
保存与 fileURL
相同的地址。由于当函数完成时,fileURL
超出范围,sourceURLArray[0]
中的地址被释放。
看来我误解了有关复制、免费桥接的细微差别或两者的一些基本知识。
最佳答案
尝试:
sourceURLArray[0] = (__bridge_retained CFURLRef)([fileURL copy]);
或:
sourceURLArray[0] = (CFURLRef)CFBridgingRetain([fileURL copy]);
这告诉 ARC 您正在将所有权转移到另一个阵列。您现在必须在某个时刻正确调用 CFURLRef
上的 CFRelease。
关于ios - 如何将 NSURL 对象复制到 CFURL 结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770040/
我是一名优秀的程序员,十分优秀!