您的位置:首页 > 移动开发 > IOS开发

IOS获取系统通讯录联系人信息

2015-10-20 11:19 211 查看
IOS关于通讯录的开发有两种,一种是直接调用系统的通讯录界面,根据回调信息处理数据,另一种是直接获取系统的通讯录,完全自定义UI,并且可以通过官方给我们提供的接口进行读写。这篇博客主要讨论第二种方式。

一、权限注册

随着apple对用户隐私的越来越重视,IOS系统的权限设置也更加严格,在获取系统通讯录之前,我们必须获得用户的授权。权限申请代码示例如下:

几点注意:1、dispatch_semaphore_t三个相关的操作为

                           dispatch_semaphore_create 创建一个信号

                 dispatch_semaphore_signal 发送一个信号

                  dispatch_semaphore_wait               等待信号触发    

                             dispatch_semaphore_create()创建一个信号,后面可以跟一个参数,表示信号量,当信号量正值时,dispatch_semaphore_wait后面的代码会被执行,否则程序将会一直等待在dispatch_semaphore_wait。 dispatch_semaphore_signal的作用是发送一个信号,会使信号量加1,相对的,dispatch_semaphore_wait执行后会使信号量减1.

                  2、因为是否被授权是在ABAddressBookRequestAccessWithCompletion的block回调中获取的,所以我们需要在外面做一个线程等待。

二、获取通讯录联系人详细信息

//获取所有联系人的数组


一点扩展:相同的方法,可以获取关联人信息,社交信息,邮箱信息,各种类型的电话信息,字段如下:

//相关人,组织字段


三、通讯录“写”的相关操作

看到上面读取信息的代码,你可能觉得一阵目炫,其实只是字段比较长,逻辑还是很简单的,同样,写的操作与之类似,创建,修改,删除,是我们对通讯录“写”的常用操作。

1、创建一个联系人

?

2、修改联系人

修改联系人的操作就是将获取和添加和在一起,先获取到相应的联系人引用,重设其属性字段即可。

3.删除联系人

?

四、重中之重-关于内存管理

上面的代码为了演示方便,创建的全部引用都没有释放,势必是造成内存泄露,在我们用ABAddressBookCreate()创建一个引用对象时,切记无论ARC还MRC,要用CFRelease()进行释放引用,例如上面的例子,我们需要加上这句代码

CFRelease(addBook);

如果你耐心的看到了这里,我想你一定明白了我为什么不在前边的代码里说明这个问题,因为在ARC项目普及的现在,这的确是重中之重。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  通讯录