Core Foundation框架
2015-12-27 09:59
477 查看
Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能。
简单来说 就是 在提供开发iOS - APP中 的基本类型和一些扩展功能。举个例子:
CFStringRef 和 NSString* 是一样的, 可以互转。(注意,是NSString*,因为CFStringRef是个指针)
关于Core Foundation,网上讲的最多的就是toll-free bridge。
简单的复述下:
__bridge只做类型转换,但是不修改对象(内存)管理权;
__bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象;
__bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC。
再举一个非常常用的例子:
- (NSString *)getPinyinWithStr:(NSString *)str {
NSString* ret;
NSMutableString *lin = [[NSMutableString alloc] initWithString:str];
if (CFStringTransform((__bridge CFMutableStringRef)lin, 0, kCFStringTransformMandarinLatin, NO)) {
if (CFStringTransform((__bridge CFMutableStringRef)lin, 0, kCFStringTransformStripDiacritics, NO)) {
ret = [lin uppercaseString];
}
}
return ret;
}
这是一个把中文转拼音的函数。里面就用到了CoreFoudation里面的CFStringTransform函数。
个人理解:CoreFoundation就是一个带了很多方法的库,这些方法是以c语言的接口来使用的(至于为什么,还是乔布斯当初被自己创立的公司赶出去的锅)。
然后为了调用里面很实用的功能,我们必须把Foundation 里面的类型,转成CoreFoundation里面的类型。
参考
http://blog.csdn.net/chenyong05314/article/details/17208153
简单来说 就是 在提供开发iOS - APP中 的基本类型和一些扩展功能。举个例子:
CFStringRef 和 NSString* 是一样的, 可以互转。(注意,是NSString*,因为CFStringRef是个指针)
关于Core Foundation,网上讲的最多的就是toll-free bridge。
简单的复述下:
__bridge只做类型转换,但是不修改对象(内存)管理权;
__bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象;
__bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC。
再举一个非常常用的例子:
- (NSString *)getPinyinWithStr:(NSString *)str {
NSString* ret;
NSMutableString *lin = [[NSMutableString alloc] initWithString:str];
if (CFStringTransform((__bridge CFMutableStringRef)lin, 0, kCFStringTransformMandarinLatin, NO)) {
if (CFStringTransform((__bridge CFMutableStringRef)lin, 0, kCFStringTransformStripDiacritics, NO)) {
ret = [lin uppercaseString];
}
}
return ret;
}
这是一个把中文转拼音的函数。里面就用到了CoreFoudation里面的CFStringTransform函数。
个人理解:CoreFoundation就是一个带了很多方法的库,这些方法是以c语言的接口来使用的(至于为什么,还是乔布斯当初被自己创立的公司赶出去的锅)。
然后为了调用里面很实用的功能,我们必须把Foundation 里面的类型,转成CoreFoundation里面的类型。
参考
http://blog.csdn.net/chenyong05314/article/details/17208153
相关文章推荐
- std::function的本质和使用特性
- mysql 字段类型为not null时,不设置该字段的值会报错,调整sql-mode
- centos6.7 64 install virtuabox
- Shortest Proper Prefix---Trie树
- Handler可能导致的内存泄露及其优化
- win10不兼容Edius该怎么处理?让Edius正常运行的技巧
- 知道这三点,再和人辩论
- linux 下动态库使用示例
- 开源压力测试工具Jmeter(初级使用)
- 页面之间传递对象
- 数据结构实训——图书管理系统
- LeetCode - Spiral Matrix
- 032_池塘问题(lake counting)
- 安卓端上传图片到服务器php接收
- Android模拟器设置竖屏
- open-vm-tools-dkms : 依赖: open-vm-tools (>= 2:9.4.0-1280544-5ubuntu3) 但是它将不会被安装
- InfluxDb系列:几个关键概念(主要是和关系数据库做对比)
- win7与VMware ubuntu虚拟机实现文件共享(最后一定要装open-vm-dkms插件)
- php随笔(一)
- php随笔(一)