首页 > 代码库 > iOS两个框架之间的类型转换--"桥接"技术
iOS两个框架之间的类型转换--"桥接"技术
话不多说,直接举例说明吧.场景模拟:需要开发一个通讯录相关功能,实现访问以及添加等等.这时,需要使用的框架是Core Foundation.而此框架使用的是C语言,例如:CFArrayRef,CFStringRef等等.以下是读取联系人信息的简单代码:
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 }
在以上代码中,不知道各位注意没有,为了防止内存泄漏,我们必须不断的使用CFRelease来释放资源,即使在ARC下.再加上那纠结的函数,这些对于习惯了Foundation框架和ARC的猿猿们,是非常不习惯的.那么怎样做到,使用我们习惯的NSArray,NSString(Foundation框架)不再关心内存呢?如题,我们只需要使用桥接技术就可以解决:
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 }
对比起来,是不是又可以继续愉快的写代码了呢?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。