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. 万年历(hao123)代码

    网上有很多类似的代码,比如网站:hao123,IP138.日梭万年历网络版 等等,不过日梭万年历相对比较详细,也可以看看另外一篇文章的介绍: 日梭万年历网络版:http://www.cnblogs.c ...

  2. LOJ 164 【清华集训2015】V——线段树维护历史最值

    题目:http://uoj.ac/problem/164 把操作改成形如 ( a,b ) 表示加上 a 之后对 b 取 max 的意思. 每个点维护当前的 a , b ,还有历史最大的 a , b 即 ...

  3. CXF运行wsdl2java :找不到系统路径

    已经配置好cxf的环境变量出现 解决方法:一定要设置JAVA_HOME这个变量

  4. linux中set的用法

    功能说明:设置shell.语 法:set [+-abCdefhHklmnpPtuvx]补充说明:用set 命令可以设置各种shell选项或者列 出shell变量.单个选项设置常用的特性.在某些选项之后 ...

  5. php函数的实现

    1.函数     汇编中函数对应的是一组独立的汇编指令,然后通过call指令实现函数的调用.PHP编译的opcode数组,与汇编指令对应. PHP用户自定义函数的实现就是将函数编译为独立的opcode ...

  6. 修改mui accordion(折叠面板)默认展开收缩行为

    mui的折叠面板 accordion 默认展开收缩逻辑是,展开其中一个的同时收缩起同级已经展开的元素. 实际需求:展开其中一个不必收缩同级元素. 分析mui.js源代码: window.addEven ...

  7. 【Oracle学习笔记-1】Win7下安装Oracle 10g

    源程序获取 从Oracle的官网上下载Oracle 10g: 10203_vista_w2k8_x86_production_db.zip:==>服务器(必须) 10203_vista_w2k8 ...

  8. bzoj1034 泡泡堂

    Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵 ...

  9. ApplicationEvent事件机制源码分析

    <spring扩展点之三:Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法,在spring启动后做些事情> <服务网关zu ...

  10. JavaScript-Tool:Numeral.js

    ylbtech-JavaScript-Tool:Numeral.js A javascript library for formatting and manipulating numbers. 1. ...