https://developer.apple.com/library/ios/documentation/CoreFoundation/Conceptual/CFDesignConcepts/Articles/tollFreeBridgedTypes.html

toll-free bridge本质上即为Core Foundation框架和Cocoa Foundation框架中类型的相互转换,在一些含有toll-free类型参数的函数中,既可以用Core  Foundation的类型也可以用Cocoa Foundation的类型

ps:

Core Foundation框架:一组C语言接口,例如CF开头的一些类, 如CFString

Cocoa Foundation框架:Objecitve-C接口,例如NS开头的一些类,如NSString

例(非ARC):

NSString *string = @"test string";

CFStringRef cfString = (CFStringRef)string;

以上代码在非ARC的情况下适用,若在ARC的情况下需要用一些关键字(_bridge, _bridge_retained, _bridge_transfer)转换,否则编译器会报错

_bridge:只做类型转换,对象所有权不变

_bridge_retained: Cocoa Foundation的对象向CF的对象转换,CF对象的内存需要自己释放(CFRelease)

_bridge_transfer: CF的对象向Cocoa Foundation的对象转换,Cocoa Foundation的对象内存由ARC托管

注:CF对象不会被ARC托管

例(ARC):

_bridge:

NSString *string = @"test string";

CFStringRef cfString = (_bridge CFStringRef)string;

...

CFRelease(cfString);

此时如果 string 对象被释放,那么cfString也会被释放

_bridge_retained:

NSString *string = @"test string";

CFStringRef cfString = (_bridge_retained CFStringRef)string;

...

CFRelease(cfString);

此时如果 string 对象被释放,cfString不会被释放, 因为_bridge_retained会将引用加一

_bridge_transfer:

CFStringRef cfString = CFStringCreate...()...;// 或者CFStringRef cfString = CFSTR("Hello, world."); //CFSTR创建的字符串不能被修改,不通过CFString释放,直到程序结束才会被释放

NSString *string = (_bridge_transfer NSString*)cfString;

此时string会被ARC托管,即使cfString被释放,string还依然会存在

iOS toll-free bridge的更多相关文章

  1. JavaScript调用App原生代码(iOS、Android)通用解决方案

    实际场景 场景:现在有一个H5活动页面,上面有一个登陆按钮,要求点击登陆按钮以后,唤出App内部的登录界面,当登录成功以后将用户的手机号返回给H5页面,显示出来.这个场景应该算是比较完整的一次H5中的 ...

  2. WebViewJavascriptBridge详细使用 iOS与H5交互的方案

    WebViewJavascriptBridge详细使用 源网址: https://www.cnblogs.com/jiang-xiao-yan/p/5345755.html    前言 WebView ...

  3. vue实现与安卓、IOS交互

    方案背景 IOS用的是jsBridge插件实现调用.传参.回调的 安卓是在window挂载方法和挂载回调的 IOS实现方案 调用原生方法封装如下 function setupWebViewJavasc ...

  4. WebViewJavascriptBridge源码探究--看OC和JS交互过程

    今天把实现OC代码和JS代码交互的第三方库WebViewJavascriptBridge源码看了下,oc调用js方法我们是知道的,系统提供了stringByEvaluatingJavaScriptFr ...

  5. WebViewJavascriptBridge详细使用(转载)

    WebViewJavascriptBridge是支持到iOS6之前的版本的,用于支持native的iOS与javascript交互.如果需要支持到iOS6之前的app,使用它是很不错的.本篇讲讲Web ...

  6. WebViewJavascriptBridge的基本原理

    前言 WebViewJavascriptBridge是支持到iOS6之前的版本的,用于支持native的iOS与javascript交互.如果需要支持到iOS6之前的app,使用它是很不错的.本篇讲讲 ...

  7. WebViewJavascriptBridge详细使用

    前言 WebViewJavascriptBridge是支持到iOS6之前的版本的,用于支持native的iOS与javascript交互.如果需要支持到iOS6之前的app,使用它是很不错的.本篇讲讲 ...

  8. H5在WebView上开发小结

    背景 来自我司业务方要求,需开发一款APP.但由于时间限制,只能采取套壳app方式,即原生app内嵌webview展示前端页面.本文主要记述JavaScript与原生app间通信,以及内嵌webvie ...

  9. 掘金 Android 文章精选合集

    掘金 Android 文章精选合集 掘金官方 关注 2017.07.10 16:42* 字数 175276 阅读 50053评论 13喜欢 669 用两张图告诉你,为什么你的 App 会卡顿? - A ...

  10. React Native入门——IDE及其它相关基础技术

    关于React Native的开发,当中一个问题是缺少好用的IDE,有些人说不就是JS么,搞一个记事本也就写了,那样尽管牛逼,但事实上还是非常头大的,有一款好的IDE还是能提升开发效率的,这里对几个还 ...

随机推荐

  1. Oracle 实例恢复

    -======================= -- Oracle 实例恢复 --======================= 一.Oracle实例失败 Oracle实例失败多为实例非一致性关闭所 ...

  2. ORA-10997:another startup/shutdown operation of this instance in progress解决方法

    SQL> startup ORA-10997: another startup/shutdown operation of this instance inprogress ORA-09967: ...

  3. vue 回车自动登录

    原理: 在密码输入框加入事件:@keyup.enter.native 登录button加入事件:@click 代码: pug 语法: el-form(ref="loginForm" ...

  4. Jenkins进阶-获取git tags代码(2)

    配置Jenkins获取git tag代码的方式其实方法很多,目前我使用比较多的主要是通过Git Parameter 来配置动态的获取最新tags代码,主要我们首先需要安装一下Git Parameter ...

  5. window下安装两个mysql服务

    产生这个想法主要是因为win系统之前装了mysql,服务名为mysql.又重新安装xampp,导致mysql冲突,xampp中的mysql始终启动不起来.   解决方法如下: 1.修改xampp中my ...

  6. Microsoft Dynamics CRM 4.0 JScript 通用公共方法

    1.基本参数 var CRM_FORM_TYPE_CREATE = 1; var CRM_FORM_TYPE_UPDATE = 2; var CRM_FORM_TYPE_READ_ONLY = 3; ...

  7. golang defer的使用

    defer一般用于在函数结束时执行必要的处理工作.例如,关闭文件描述符,关闭网络连接等等. 函数中可以定义多个defer,执行的时候按照先进后出的顺序. defer定义的语句,即使遇到panic,也会 ...

  8. jquery select radio

    Query获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...});   //为S ...

  9. MySqli 中预处理类 stmt

    非select 语句(没有结果集的) 1.建立连接数据库 $mysqli=new mysqli("localhost","root","", ...

  10. php webservice实例(转载)

    首先大家要简单了解了何谓webservice,接下来就做两个非常简单的例子,webservice还是逃不开server端(服务器端) 与client端(客户端) . 做这个测试之前,要确认你的php配 ...