__bridge_transfer和ABRecordCopyValue:和ARC

我正在访问通讯簿,并有这条线,正在编译使用ARC:

ABMultiValueRef phoneNums = ABRecordCopyValue(person, kABPersonPhoneProperty); 

这条线是否需要重写为:

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

如果是,那么编译器不应该产生警告? 如果没有,那么也许我不明白使用ARC与核心框架彻底结合。

不,你不应该在这种情况下搭桥。 ABMultiValueRef是一个CFTypeRefABRecordCopyValue返回一个CFTypeRef 。 没有必要的桥梁。

当你在idCFTypeRef (这是void*的同义词)之间进行转换时,需要进行桥接转换。

不,因为你没有做任何事情做这个任务。 您将在稍后时间CFRelease返回的引用,就像您在普通所有权规则下做的一样。