CoreFoundation框架的对象所有权交给Foundation框架的内存问题
来源:互联网 发布:喝茶 知乎 编辑:程序博客网 时间:2024/06/05 09:51
很简单:
Typically NSString *yourFriendlyNSString = (__bridgeNSString *)yourFriendlyCFString;
and
CFStringRef yourFriendlyCFString = (__bridge CFStringRef)yourFriendlyNSString;
引自:http://stackoverflow.com/questions/17227348/nsstring-to-cfstringref-and-cfstringref-to-nsstring-in-arc
很多时候都会使用到CoreFoundation的函数,其返回值为CoreFoundation框架的对象,如果想转换为Foundation框架的对象就可以使用桥接方式来搞定。
示例代码:
[objc] view plaincopy
- CFStringRef firstname = ABRecordCopyValue(person, kABPersonFirstNameProperty);
- CFStringRef lastname = ABRecordCopyValue(person, kABPersonLastNameProperty);
- NSString *firstName = (__bridge NSString *)(firstname);
- NSString *lastName = (__bridge NSString *)(lastname);
但是使用这种桥接方式就有可能会出现内存泄露。
在ARC模式下使用CoreFoundation的函数都需要考虑到内存泄露问题,上面的桥接方式仅仅是将CoreFoundation框架的对象所有权交给Foundation框架来使用,并不能管理该对象的内存,如果我们想管理该对象内存就使用另外一种桥接方式即可。
示例代码:
[objc] view plaincopy
- NSString *firstName = (__bridge_transfer NSString *)(firstname);
- NSString *lastName = (__bridge_transfer NSString *)(lastname);
总结:
__bridge type : 将CoreFoundation框架的对象所有权交给Foundation框架来使用,但是Foundation框架中的对象并不能管理该对象的内存。
__bridge_transfer Objective-C type : 将CoreFoundation框架的对象所有权交给Foundation来管理,如果Foundation中对象销毁,那么我们之前的对象(CoreFoundation)会一起销毁。
使用__bridge_transfer Objective-C type这种桥接方式,以后就不用再自己手动管理内存了!
- CoreFoundation框架的对象所有权交给Foundation框架的内存问题
- corefoundation与foundation的桥接问题
- Toll-Free Bridging详解——CoreFoundation和Foundation框架的无损桥接
- 学习小结8-----CoreFoundation当中的类型跟Foundation框架中的类型互相转换
- coreFoundation框架转换为foundation -->桥接
- Foundation框架-08 集合对象的内存管理
- CoreFoundation框架
- Foundation框架-数字对象的操作
- CoreFoundation于Foundation对象转换
- Foundation框架第二十弹:OC的内存管理
- IOS 学习之 —— Foundation & CoreFoundation 的转换
- OC的Foundation框架2
- OC的Foundation框架1
- Foundation 框架的常用类
- Foundation框架的一些概述
- Foundation框架--NSMutableArray的使用
- Foundation框架--NSDictionary的使用
- Foundation框架的简单介绍
- AngularJS2 学习(二)---配置环境(一)
- idea注册码
- wait和notify来设计阻塞式队列的流程
- #Caffe# Win10+VS2013+CUDA+Caffe
- set,setenv和export
- CoreFoundation框架的对象所有权交给Foundation框架的内存问题
- 利用递归树计算递归算法的复杂度
- R中文词云包wordcloud2试用
- C++关联容器(unordered_map,vector,unordered_set)
- github上传本地项目
- 修改tomcat里面的jsession里面的名字
- 为什么NSMutableArray必须用strong,而NSArray必须用copy?
- word 论文排版 —— 按指定格式章节的自动编号
- mac下AS中Gradle project sync failed. Basic functionality (eg. editing, debugging) will not work prop