就像今天这样的日子,我觉得自己像个白痴......
我有一个ivar
,它是CFURLRef
结构的'普通'C数组。我称之为sourceURLArray
。我初始化它以容纳六个元素。
稍后,在函数中,我创建(alloc / init)一个NSURL*
对象。我称之为fileURL
,我想将该对象的副本保存到上述数组的第一个元素中。我认为我需要做的就是:
sourceURLArray[0] = (__bridge CFURLRef)([fileURL copy]);
然而,当我执行代码时,我第二次通过该函数将消息发送到解除分配的实例消息。在检查变量后,在执行上述行之后,sourceURLArray[0]
保持与fileURL
相同的地址。由于fileURL
在函数完成时超出范围,因此sourceURLArray[0]
中的地址被释放。
似乎我误解了一些关于复制,无人值守桥接的细微差别或两者兼而有之的基本原因。
提前感谢任何方向。
答案 0 :(得分:1)
尝试:
sourceURLArray[0] = (__bridge_retained CFURLRef)([fileURL copy]);
或:
sourceURLArray[0] = (CFURLRef)CFBridgingRetain([fileURL copy]);
这告诉ARC您要将所有权转移到其他阵列。您现在必须在CFURLRef
处正确调用CFRelease。