__bridge_transfer和ABRecordCopyValue:和ARC
我正在访问通讯簿,并有这条线,正在编译使用ARC:
ABMultiValueRef phoneNums = ABRecordCopyValue(person, kABPersonPhoneProperty);
这条线是否需要重写为:
ABMultiValueRef phoneNums = (__bridge_transfer ) ABRecordCopyValue(person, kABPersonPhoneProperty);
如果是,那么编译器不应该产生警告? 如果没有,那么也许我不明白使用ARC与核心框架彻底结合。
不,你不应该在这种情况下搭桥。 ABMultiValueRef
是一个CFTypeRef
。 ABRecordCopyValue
返回一个CFTypeRef
。 没有必要的桥梁。
当你在id
和CFTypeRef
(这是void*
的同义词)之间进行转换时,需要进行桥接转换。
不,因为你没有做任何事情做这个任务。 您将在稍后时间CFRelease
返回的引用,就像您在普通所有权规则下做的一样。