是否可以將一個帶有免費橋接等價物的Objective-C類型的塊直接傳遞給一個預期帶有C類型塊的方法?ObjC使用免費橋接類型來建立一個塊
具體的例子
我包裹通訊錄和聯繫人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
類型的對象鍵入void(^)(bool granted, CFErrorRef error)
?如果可以的話,語法是什麼? ARC環境中所有權的含義是什麼?
我從來沒有考慮過非橋接投,因爲我很害怕關於底層的內存管理。 「ARC環境中所有權的含義是什麼?」我是不是在過度複雜的問題。我猜所有的塊都是ObjC對象(讀取:id),不管它是否包含C或ObjC類型,所以內存管理並不重要。 –