__bridge_transfer and ABRecordCopyValue: and ARC

3

我正在访问地址簿,这是一行代码,在使用ARC编译:

 ABMultiValueRef phoneNums = ABRecordCopyValue(person, kABPersonPhoneProperty);

这行代码需要重写吗:

ABMultiValueRef phoneNums = (__bridge_transfer ) ABRecordCopyValue(person, kABPersonPhoneProperty);

如果是的话,编译器不应该生成警告吗? 如果不是的话,那么我可能没有完全理解如何将ARC与核心框架结合使用。
2个回答

2
不会的,因为你通过进行该赋值操作并没有进行任何转换。你只是按照普通的所有权规则稍后将返回的引用CFRelease,并不会造成任何类型的转换。

2
不,在这种情况下不需要桥接。ABMultiValueRef是CFTypeRef类型,而ABRecordCopyValue返回的也是CFTypeRef类型,不存在需要桥接的情况。
只有在id和CFTypeRef(也就是void*的同义词)之间转换时才需要进行桥接强制转换。

那么ARC不会自动释放ABMultiValueRef吗? - Gruntcakes
不。ARC仅为id插入retainrelease调用。没有其他的。请参阅https://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFMemoryMgmt/CFMemoryMgmt.html和https://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC。 - Rob Napier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接