0

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

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

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

但是,当我执行代码时,我第二次通过该函数将消息发送到已释放的实例消息。在检查变量后,在上面的行执行后,sourceURLArray[0]它的地址与fileURL. 由于fileURL函数完成时超出范围,因此将sourceURLArray[0]释放地址。

似乎我误解了关于复制、免费桥接的细微差别或两者兼而有之的基本知识。

4

1 回答 1

1

尝试:

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

或者:

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

这告诉 ARC 您正在将所有权转移到另一个阵列。CFURLRef您现在必须在某个时候正确调用 CFRelease 。

于 2012-12-07T19:55:51.130 回答