话不多说,直接举例说明吧.场景模拟:需要开发一个通讯录相关功能,实现访问以及添加等等.这时,需要使用的框架是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 }
对比起来,是不是又可以继续愉快的写代码了呢?
时间: 2025-01-14 14:53:37