码迷,mamicode.com
首页 > 移动开发 > 详细

iOS两个框架之间的类型转换--"桥接"技术

时间:2014-06-07 08:45:28      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

  话不多说,直接举例说明吧.场景模拟:需要开发一个通讯录相关功能,实现访问以及添加等等.这时,需要使用的框架是Core Foundation.而此框架使用的是C语言,例如:CFArrayRef,CFStringRef等等.以下是读取联系人信息的简单代码:

  

bubuko.com,布布扣
 1 - (void)readMessage
 2 {
 3     ABAddressBookRef abR = ABAddressBookCreateWithOptions(NULL, NULL);
 4     CFArrayRef arrayR = ABAddressBookCopyArrayOfAllPeople(abR);
 5     CFIndex count = CFArrayGetCount(arrayR);
 6     for (CFIndex i = 0; i < count; ++i) {
 7         ABRecordRef recR = CFArrayGetValueAtIndex(arrayR, i);
 8         CFStringRef strR = ABRecordCopyValue(recR, kABPersonLastNameProperty);
 9         NSLog(@"%@",strR);
10         CFRelease(strR);
11     }
12     CFRelease(arrayR);
13     CFRelease(abR);
14 
15 }
bubuko.com,布布扣

 

  在以上代码中,不知道各位注意没有,为了防止内存泄漏,我们必须不断的使用CFRelease来释放资源,即使在ARC下.再加上那纠结的函数,这些对于习惯了Foundation框架和ARC的猿猿们,是非常不习惯的.那么怎样做到,使用我们习惯的NSArray,NSString(Foundation框架)不再关心内存呢?如题,我们只需要使用桥接技术就可以解决:

  

bubuko.com,布布扣
 1 - (void)readMessage2
 2 {
 3     ABAddressBookRef abR = ABAddressBookCreateWithOptions(NULL, NULL);
 4     
 5     NSArray *array = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(abR);
 6     int count = array.count;
 7     for (int i = 0; i < count; ++i) {
 8         ABRecordRef recR = (__bridge ABRecordRef)array[i];
 9         NSString *str = (__bridge NSString *)ABRecordCopyValue(recR, kABPersonLastNameProperty);
10         NSLog(@"%@",str);
11     }
12     
13     CFRelease(abR);
14 }
bubuko.com,布布扣

  对比起来,是不是又可以继续愉快的写代码了呢?

iOS两个框架之间的类型转换--"桥接"技术,布布扣,bubuko.com

iOS两个框架之间的类型转换--"桥接"技术

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/dashunzi/p/3770438.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!