您的位置:首页 > 移动开发 > IOS开发

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;

大概就是这样
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: