如何将NSURL对象复制到CFURL结构数组

时间:2012-12-07 19:49:30

标签: ios cocoa

就像今天这样的日子,我觉得自己像个白痴......

我有一个ivar,它是CFURLRef结构的'普通'C数组。我称之为sourceURLArray。我初始化它以容纳六个元素。

稍后,在函数中,我创建(alloc / init)一个NSURL*对象。我称之为fileURL,我想将该对象的副本保存到上述数组的第一个元素中。我认为我需要做的就是:

        sourceURLArray[0] = (__bridge CFURLRef)([fileURL copy]);

然而,当我执行代码时,我第二次通过该函数将消息发送到解除分配的实例消息。在检查变量后,在执行上述行之后,sourceURLArray[0]保持与fileURL相同的地址。由于fileURL在函数完成时超出范围,因此sourceURLArray[0]中的地址被释放。

似乎我误解了一些关于复制,无人值守桥接的细微差别或两者兼而有之的基本原因。

提前感谢任何方向。

1 个答案:

答案 0 :(得分:1)

尝试:

sourceURLArray[0] = (__bridge_retained CFURLRef)([fileURL copy]);

或:

sourceURLArray[0] = (CFURLRef)CFBridgingRetain([fileURL copy]);

这告诉ARC您要将所有权转移到其他阵列。您现在必须在CFURLRef处正确调用CFRelease。