標籤:ios 通訊錄
iOS 6 之後應用訪問通訊錄需要獲得使用者授權,並且只授權一次,即使卸載了之後再安裝,也不用再次授權;
開發通訊錄應用需要兩個架構:
1.ABAddressBook 主要用於提供訪問通訊錄中的記錄和屬性等API,使用他需要自己構建UI。
2.ABAddressBookUI 這個架構給我們提供了4個視圖控制器以及相應的委託協議,他們已經提供了UI介面
ABAddressBook 架構中常用的類“()”前面的類為Foundation中的類,()內的是Core Foundation架構中類
ABAddressBook(ABAddressBookRef)封裝訪問通訊錄介面;
ABPerson (ABPersonRef)封裝通訊錄個人資訊資料,是資料庫的一條的記錄;
ABGroup (ABGroupRef)封裝通訊錄資訊資料,一個組包含多個人的資訊,一個人的資訊可以屬於多個組;
ABRecord (ABRecordRef) 封裝資料庫中得一條記錄,記錄由屬性群組成;
ABAddressBookUI架構中的視圖控制器
ABPeoplePickerNavigationController 他是從資料庫中選取連絡人導航控制器,對應的委託協議為ABPeoplePickerNavigationControllerDelegate
ABPersonViewController 查看並編輯單個連絡人的資訊,對應的委託協議為ABPersonViewControllerDelegate
ABNewPersonViewController 建立新連絡人資訊,對應的委託協議為ABNewPersonViewControllerDelegate
ABUnknowPersonViewController 呈現記錄部分資訊,這些資訊可以建立新連絡人的資訊,或者添加到已存在的連絡人,對應的委託協議為ABUnknowPwesonViewControllerDelegate
在使用ABAddressBook時我們使用的是Core Foundation架構; Core Foundation(c語言) 架構和Foundation(o-c)架構是相同的功能介面,如果要混合使用需要兩個架構之間的“無開銷橋接”;
這裡用NSAArray來舉個例子:
將Core Foundation類型轉換為Foundation類型
CFArrayRef x; //第一種轉換方式 NSArray *array = (__bridge NSArray *)x; //第二種轉換方式 array = CFBridgingRelease(x);
使用第一種轉換方式時不轉換對象所有權,只是強制轉換。需要手動釋放對象;
使用第二種轉換方式時轉換對象所有權,並把對象所有權轉讓ARC ,不需要手動釋放
將Foundation類型轉換為Core Foundation類型
NSArray * array = nil; //第一種方式 CFArrayRef arrayRef = (__bridge CFArrayRef)array; //第二種方式 arrayRef = CFBridgingRetain(array);
這兩種方式同樣是第一種不轉換對象所有權,還是Foundation對象所以自動釋放 。
第二種轉換對象所有權需要手動釋放對象(CFRelease(arrayRef);)
iOS 通訊錄基礎