ABAddressBookRequestAccessWithCompletion线程安全

1、访问通讯录

iOS在第一次访问用户通讯录时,需要调用 ABAddressBookRequestAccessWithCompletion然后在CallBack中调用UI模块进行联系人数据展示。
一般的形式如下:
ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
                    if (granted)
                    {
                        //展示联系人数据
                    }
                    else
                    {
                        //提示用户设置访问权限
                    }
});

2、线程安全

用于回调的block是在子线程被调用,可以在block中添加如下代码:

 ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted,CFErrorRef error) {
                   if ([[NSThreadcurrentThread]isMainThread]) {
                       NSLog(@"main thread");
                    }
                   else
                    {
                       NSLog(@"child thread");
                    });

运行会发现,最后是子线程回调该block的,如果在子线程中直接操作UI模块是不被允许的,UI的操作应该放在主线程中:

ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
//                    if ([[NSThread currentThread] isMainThread]) {
//                        //NSLog(@"main thread");
//                    }
//                    else
//                    {
//                        //NSLog(@"child thread");
//                    }
                    dispatch_async(dispatch_get_main_queue(), ^{
                        if (granted)
                        {
                            TKContactsMultiPickerController *contactMultiController = [[TKContactsMultiPickerController alloc] initWithGroup:nil];
                            contactMultiController.addressBook = self.addressBook;
                            contactMultiController.delegate = self;
                            [self.navigationController pushViewController:contactMultiController animated:YES];
                           
                        }
                        else
                        {
                            [self.view makeToast:NSLocalizedString(@"your system Settin", nil)
                                        duration:1.0
                                        position:@"center"];
                        }
                    });
                });


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值