是否可以将采用具有免费桥接等效物的 Objective-C 类型的块直接传递到期望具有 C 类型的块的方法中?
具体例子
我根据可用性包装了 AddressBook 和 Contacts API,并且框架包含两种方法,它们的所有意图和目的都是相同的。考虑完成块参数:
CNContactStore
的- (void)requestAccessForEntityType:(CNEntityType)entityType completionHandler:(void (^)(BOOL granted, NSError *error))completionHandler
和
AddressBook
的void ABAddressBookRequestAccessWithCompletion ( ABAddressBookRef addressBook, void(^)(bool granted, CFErrorRef error) completion );
我有一个类型块,void (^)(BOOL granted, NSError *error)
如果我可以将它传递给ABAddressBookRequestAccessWithCompletion(...)
. 我知道我可以将我的“objc”块包装在一个将“C 类型”作为参数的块中,但是当这些类型是免费桥接时,这样做是没有意义的。
具体问题
有没有办法将类型的对象void (^)(BOOL granted, NSError *error
转换为 type void(^)(bool granted, CFErrorRef error)
?如果可以,语法是什么?ARC 环境中所有权的含义是什么?