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 }

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

时间: 2024-08-12 14:27:50

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

ios两个app之间跳转,传值的实现

两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的. 1.首先设置第一个APP的url地址 2.接着设置第二个APP的url地址 3.需要跳转的时候 NSString *urlString = [NSString stringWithFormat:@"AppJumpSecond://%@",textField.text]; [[UIApplication sharedApplication] open

ios 两个 TableView 之间的联动, TableView 与 CollectionView 之间的联动

两个 TableView 之间的联动, TableView 与 CollectionView 之间的联动 这是一个创建于 359 天前的主题,其中的信息可能已经有所发展或是发生改变. [联动] :两个 TableView 之间的联动, TableView 与 CollectionView 之间的联动 前言 现在市面上有很多 app 都有联动功能,有的是两个 TableView 之间的联动,比如美团外卖,百度外卖,饿了么等等.有的是 TableView 与 CollectionView 之间的联动

IOS两个应用之间的跳转

开发IOS项目的时候,有可能会遇到两个APP应用相互调用的需求,比如说:支付宝支付......等等. 下面来详细介绍实现的步骤: 1,添加URL Types项 a,打开项目中info.plist文件,在infomation property list项下面增加一项URL Typs 2,配置URL Scheme a,展开URL types,再展开Item1,将Item1下的URL identifier修改为URL Scheme b,展开URL Scheme,将Item1的内容修改为myapp (其

iOS 两个页面之间的跳转

-------->-------->-------->-------->-------->-------->-------->   以上完成页面one跳到页面Two  ,之后从页面Two返回页面One -------->-------->-------->-------->

iOS 两个viewcontroller之间的delegate传值

第二个界面往第一个界面传值 第二个界面 //第二个界面制定协议 @protocol ChuanZhiDelegate <NSObject> - (void)chuanzhid; @end @interface ViewController2 : UIViewController @property(nonatomic,assign)id<ChuanZhiDelegate>chuanzhidelegate; @end - (void)viewDidLoad { [super view

iOS的基本框架

在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像.声音文件等其他资源.共享资源库定义应用程序可以调用的函数和方法.    iOS为应用程序开发提供了许多可使用的框架,并构成IOS操作系统的层次架构,分为四层,从上到下依次为:Cocoa Touch Layer(触摸UI层).MediaLayer(媒体层).Core Services Layer(核心服务层).Core OS Layer(核心OS层). 低层次框架提供IOS的基本服务和技术,高层次框架建立在

iOS 的基本框架

在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像.声音文件等其他资源.共享资源库定义应用程序可以调用的函数和方法.    iOS为应用程序开发提供了许多可使用的框架,并构成IOS操作系统的层次架构,分为四层,从上到下依次为:Cocoa Touch Layer(触摸UI层).MediaLayer(媒体层).Core Services Layer(核心服务层).Core OS Layer(核心OS层). 低层次框架提供IOS的基本服务和技术,高层次框架建立在

C#获取两个日期之间的间隔

在应用程序开发的过程中,很多时候涉及到时间的操作,例如时间的大小比较以及两个时间的间隔.此文就简单介绍下C#语言如何获取两个时间之前的间隔.在C#中获取两个时间之间的间隔需要使用到TimeSpan类,该对象表示两个日期之间的差异.TimeSpan结构用于测量持续时间的最大时间单位是一天.时间间隔以天为单位进行测量,以确保一致性,因为较大单位时间(例如月和年)的天数会有所不同.TimeSpan对象的值是等于表示的时间间隔的刻度数.刻度等于100纳秒,或一千万分之一秒.获取两个时间的间隔可以使用下列

iOS 判断两个日期之间的间隔

两个时间段,判断之间的相差,做一些时间范围限制使用 NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyyMMddHHmmss"]; NSDate* toDate     = [dateFormatter dateFromString:@"20140702142033"]; NSDate*  startDate    =