我开始用 Objective-C 学习编程,对 C 的了解不多。所以,iOS 6 中的桥接转换对我来说仍然有些困惑。
这是场景:
我有一个人 ABRecordID 作为“NSNumber”属性存储在 CoreData 中。稍后,我想直接访问那个人,所以我想使用这个人的 ABRecordID 来访问使用 ABAddressBook 的联系信息。注意到ABAddressBookGetPersonWithRecordID
需要 ABRecordID,下面是我在代码中执行转换的方式...
address_book = ABAddressBookCreate();
ABRecordID rec_id = (__bridge ABRecordID)person.record_id;
但是,这并不成功,我得到了incompatible types casting 'int' into 'ABRecordID' (aka 'int') with a __bridge cast
.
已经很困惑了,在 ARC 类型和 CF 类型之间架桥转换的正确方法是什么?
另外,在哪种情况下我应该使用(__bridge retained)
而不是(__bridge)
?