IOS之 OC 和 C类型转换
2013-10-14 19:51
197 查看
在OC和 C之间互相调用的时候,有时候必须用一些桥接关键字.
__bridge只做类型转换,但是不修改对象(内存)管理权;
__bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象;__bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC。
__bridge
比如说一个类实例想要转换成void * 那就必须这样定义,不然的话会报错.
class *a;
void *b = (__bridge void *)a;
相反的
class *c = (__bridge class *)b;
生命周期仅在大括号的代码内
__bridge_retained
上边代码仅仅是指向一个对象,如果对象不存在那么它也指向null, 这个关键字是指向且拥有该对象就是.
生命周期如果是ARC不用管,如果不是那么必须手动RELEASE。
class *a;
void *b = (__bridge void *)a;
a
retain;
__bridge_transfer
这个关键字的相当于释放原对象的拥有权,然后自己拥有。
class *a;
void *b = (__bridge void *)a;
a release;
b retain;
大概就是这样
__bridge只做类型转换,但是不修改对象(内存)管理权;
__bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象;__bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC。
__bridge
比如说一个类实例想要转换成void * 那就必须这样定义,不然的话会报错.
class *a;
void *b = (__bridge void *)a;
相反的
class *c = (__bridge class *)b;
生命周期仅在大括号的代码内
__bridge_retained
上边代码仅仅是指向一个对象,如果对象不存在那么它也指向null, 这个关键字是指向且拥有该对象就是.
生命周期如果是ARC不用管,如果不是那么必须手动RELEASE。
class *a;
void *b = (__bridge void *)a;
a
retain;
__bridge_transfer
这个关键字的相当于释放原对象的拥有权,然后自己拥有。
class *a;
void *b = (__bridge void *)a;
a release;
b retain;
大概就是这样
相关文章推荐
- iOS之CF和OC之间类型转换
- 小白学开发(iOS)OC_基本数据类型转换成字符串(2015-08-12)
- OC基础:OC 基本数据类型与对象之间的转换方法 分类: ios学习 OC 2015-06-18 20:01 11人阅读 评论(0) 收藏
- iOS OC类型和C类型相互转换
- iOS之CF和OC之间类型转换
- iOS之CF和OC之间类型转换
- IOS开发时间格式转换之──C语言中time_t数据类型转为NSString类型
- ios–OpenCV–IplImage与UIImage类型相互转换
- iOS Foundation框架 利用NSNumber和NSValue将非OC对象类型数据存放到集合
- ios-oc数据类型
- iOS_OC 字典模型转换工具的比较(Mantle和MJExtension和Jsonmodel) 持续更新
- 小白学开发(iOS)OC_ id类型(2015-07-28)
- iOS开发-OC数据类型
- iOS学习之——一些常见的数据类型的转换
- iOS 中的各个类型之间的转换(后期更新)
- ios NSString、NSData、char* 类型之间的转换
- IOS开发--基本类型转换
- iOS类型转换
- IOS开发NSString与int和float的相互转换以及字符串拼接、NSString、NSData、char* 类型之间的转换
- [ios][swift]Swift类型之间转换