Core Foundation框架介绍
Core Foundation框架介绍
**参考网址:
Core Foundation框架
Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能。下面列举该框架支持进行管理的数据以及可提供的服务:
- 群体数据类型 (数组、集合等)
- 程序包
- 字符串管理
- 日期和时间管理
- 原始数据块管理
- 偏好管理
- URL及数据流操作
- 线程和RunLoop
- 端口和soket通讯
Core Foundation框架和Foundation框架紧密相关,它们为相同功能提供接口,但Foundation框架提供Objective-C接口。如果您将Foundation对象和Core Foundation类型掺杂使用,则可利用两个框架之间的 “toll-free bridging”。所谓的Toll-free bridging是说您可以在某个框架的方法或函数同时使用Core Foundatio和Foundation 框架中的某些类型。很多数据类型支持这一特性,其中包括群体和字符串数据类型。每个框架的类和类型描述都会对某个对象是否为 toll-free bridged,应和什么对象桥接进行说明。
如需进一步信息,请阅读Core Foundation 框架参考
ARC下OC对象和CF对象之间的桥接(bridge)
ARC仅管理Objective-C指针(retain、release、autorelease),不管理CoreFoundation指针,CF指针由人工管理,手动的CFRetain和CFRelease来管理,注,CF中没有autorelease。
__bridge:CF和OC对象转化时只涉及对象类型不涉及对象所有权的转化
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];
CFURLRef ref = (CFURLRef)url;
上面的这段代码在ARC环境下系统会给出错误提示和错误修正,修正后如下:
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];
CFURLRef ref = (__bridge CFURLRef)url;
系统为我们自动添加了__bridge,因为是OC创建的对象并且在转换时没有涉及对象所有权的转换,所以上面的代码不需要加CFRelease
__bridge_transfer:常用在将CF对象转换成OC对象时,将CF对象的所有权交给OC对象,此时ARC就能自动管理该内存;(作用同CFBridgingRelease())
__bridge_retained:(与__bridge_transfer相反)常用在将OC对象转换成CF对象时,将OC对象的所有权交给CF对象来管理;(作用同CFBridgingRetain())
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];
CFURLRef ref = (__bridge_retained CFURLRef)url;
CFRelease(ref);
当使用_bridge_retained标识符以后,代表OC要将对象所有权交给CF对象自己来管理,所以我们要在ref使用完成以后用CFRelease将其手动释放.
CFStringRef cfString= CFURLCreateStringByAddingPercentEscapes(
NULL,
(__bridge CFStringRef)text,
NULL,
CFSTR("! *’();:@&=+$,/?%#[]"), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
NSString *ocString = (__bridge_transfer CFStringRef)cfString;
此时OC即获得了对象的所有权,ARC负责自动释放该对象,如果我们在结尾加上CFRelease(cfString)纯属画蛇添足,虽不会崩溃,但是控制台会打印出该对象被free了两次。
最新文章
- SharePoint 2010升级到sharePoint 2013后,人员失去对网站的权限的原因及解决方法。The reason and solution for permission lost after the upgrading
- 我对前端MVC的理解
- Python学习笔记 (1) :python简介、工具、编码及基础运算
- 常见div+css网页布局(float,absolute)
- sed的替换命令
- SSDB安装配置 ERROR! autoconf required! install autoconf first
- Linux 网络命令必知必会之 tcpdump,一份完整的抓包指南请查收!
- RabbitMQ消费者消息权重,
- vuex数据持久化插件--指定持久化特定的值
- asp.net:mv4 FileResult在IE8中下载不显示文件名和扩展名而显示Action方法名了!
- JavaScript基本操作之——九个 Console 命令
- 团队项目开发特点以及NABCD分析总结
- 部署openresty遇到的一些坑
- Ros系列_学习一
- The SDK platform-tools version ((23)) is too old to check APIs compiled with API 26;
- mysql 触发器 trigger用法 one (简单的)
- 使用click报错
- NodeJ Koa2 安装使用 reeber
- oracle 10g函数大全--数值型函数
- 让WebApi支持Namespace
热门文章
- C# 跨线程访问控件
- C++ 类的前向声明
- 最优秀的5个Linux文本编辑器
- __attribute__ ((section(";.text";)))的测试
- bzoj3639: Query on a tree VII
- Unity3D Quaternion各属性和函数测试
- ORACLE WIN7安装过程截图
- DB2 SQL RR/RS/CS/UR四个级别《转载》
- Struts2的注解功能
- Code (组合数)