iOS toll-free bridge
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的更多相关文章
- JavaScript调用App原生代码(iOS、Android)通用解决方案
实际场景 场景:现在有一个H5活动页面,上面有一个登陆按钮,要求点击登陆按钮以后,唤出App内部的登录界面,当登录成功以后将用户的手机号返回给H5页面,显示出来.这个场景应该算是比较完整的一次H5中的 ...
- WebViewJavascriptBridge详细使用 iOS与H5交互的方案
WebViewJavascriptBridge详细使用 源网址: https://www.cnblogs.com/jiang-xiao-yan/p/5345755.html 前言 WebView ...
- vue实现与安卓、IOS交互
方案背景 IOS用的是jsBridge插件实现调用.传参.回调的 安卓是在window挂载方法和挂载回调的 IOS实现方案 调用原生方法封装如下 function setupWebViewJavasc ...
- WebViewJavascriptBridge源码探究--看OC和JS交互过程
今天把实现OC代码和JS代码交互的第三方库WebViewJavascriptBridge源码看了下,oc调用js方法我们是知道的,系统提供了stringByEvaluatingJavaScriptFr ...
- WebViewJavascriptBridge详细使用(转载)
WebViewJavascriptBridge是支持到iOS6之前的版本的,用于支持native的iOS与javascript交互.如果需要支持到iOS6之前的app,使用它是很不错的.本篇讲讲Web ...
- WebViewJavascriptBridge的基本原理
前言 WebViewJavascriptBridge是支持到iOS6之前的版本的,用于支持native的iOS与javascript交互.如果需要支持到iOS6之前的app,使用它是很不错的.本篇讲讲 ...
- WebViewJavascriptBridge详细使用
前言 WebViewJavascriptBridge是支持到iOS6之前的版本的,用于支持native的iOS与javascript交互.如果需要支持到iOS6之前的app,使用它是很不错的.本篇讲讲 ...
- H5在WebView上开发小结
背景 来自我司业务方要求,需开发一款APP.但由于时间限制,只能采取套壳app方式,即原生app内嵌webview展示前端页面.本文主要记述JavaScript与原生app间通信,以及内嵌webvie ...
- 掘金 Android 文章精选合集
掘金 Android 文章精选合集 掘金官方 关注 2017.07.10 16:42* 字数 175276 阅读 50053评论 13喜欢 669 用两张图告诉你,为什么你的 App 会卡顿? - A ...
- React Native入门——IDE及其它相关基础技术
关于React Native的开发,当中一个问题是缺少好用的IDE,有些人说不就是JS么,搞一个记事本也就写了,那样尽管牛逼,但事实上还是非常头大的,有一款好的IDE还是能提升开发效率的,这里对几个还 ...
随机推荐
- Linux 下安装 Redis server
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/defonds/article/details/30047611 本文简介了 Linu ...
- Linux高级文本处理命令
cut 一.cut命令 功能:cut命令可以从一个文本文件/文本流中提取文本列 语法: cut -d '分割字符' -f fields ##用于有特定分割字符 cut -c 字符区间 ##用于排列整齐 ...
- 函数对象(functional)
来自STL中的概念:如果f是一个function object,则可以将operator()作用于f身上. 调用函数对象时构造函数和operator()执行顺序 首先执行构造函数,构造出一个匿名对象 ...
- IE版本检测
<html><body><script type="text/javascript">var browser=navigator.appName ...
- Linux 命令集合-错误
错误1 说明:在linux下,./xxx.sh执行shell脚本时会提示No such file or directory.但shell明明存在,为什么就是会提示这个呢? 这种其实是因为编码方式不对, ...
- 针对ROS5版本的配置导出和导入(迁移其他服务器)
1.在老ROS,导出当前系统配置export compact RouterOS 5.12 新增功能 export compact 命令,该命令简化了导出的参数,仅导出修改的配置,系统默 认配置参数将不 ...
- linux查看某个目录下有哪些文件的命令
分别是ll和ls命令 ll /usr/local/lib ls /usr/local/lib
- JS获取url传参
function GetRequest() { var url = location.search; //获取url中"?"符后的字串 var theRequest = new O ...
- unity3d将C#打包成dll方法
方法一:用vs新建工程-C#库,添加UnityEngine.dll引用,注意.netframwork选3.5,编译C#脚本得到dll: 方法二:使用mono的mcs,具体如下 c#提供了dll打包,但 ...
- 基于WMI获取本机真实网卡物理地址和IP地址
using System; using System.Collections.Generic; using System.Management; using System.Runtime.Intero ...