__bride、__bride_transfer和__bride_retain的区别和用法

153 篇文章 0 订阅
订阅专栏
61 篇文章 0 订阅
订阅专栏

在上一篇里讲到内存泄漏的检测,有一处内存泄露是由于CoreFoundation创建的对象没有释放掉,在开发中Foundation和CoreFoundation框架里的对象需要转换才能用。

一、ARC和Foundation、CoreFoundation

和它一样的还有__bride_transfer和__bride_retain,那么他们之间有什么关系和区别呢?在讲这个之前我们先看一下ARC和Foundation、CoreFoundation框架之间的关系:

二、__bride、__bride_transfer和__bride_retain的区别和作用

所以,在非ARC下两者互转都是需要手动管理内存的,我们重点关注的是在ARC下转换注意的地方。那么下面就是在ARC下,__bride、__bride_transfer和__bride_retain的区别和作用:

三、用法实例

接上一篇的一个内存泄露的例子,下面代码中C语言创建的两个对象没有释放:

+ (NSString *)createUUID
{
    CFUUIDRef uuidRef = CFUUIDCreate(NULL);
    CFStringRef uuidStrRef = CFUUIDCreateString(NULL, uuidRef);
    NSString *uuidStr = [NSString stringWithFormat:@"%@",uuidStrRef];   
    return uuidStr;
}

在上一篇中我们给出的解决办法,也是最直观的办法是手动释放对象的内存:

+ (NSString *)createUUID
{
    CFUUIDRef uuidRef = CFUUIDCreate(NULL);
    CFStringRef uuidStrRef = CFUUIDCreateString(NULL, uuidRef);
    NSString *uuidStr = [NSString stringWithFormat:@"%@",uuidStrRef];

    CFRelease(uuidRef);
    CFRelease(uuidStrRef);
    
    return uuidStr;
}

其实在上面提到的__bride_transfer和__bride_retain也可以解决类似的内存管理的问题,比如下面这种改法:

+ (NSString *)createUUID
{
    CFUUIDRef uuidRef = CFUUIDCreate(NULL);
    CFStringRef uuidStrRef = CFUUIDCreateString(NULL, uuidRef);
    
    NSString *uuidStr = (__bridge_transfer NSString *)uuidStrRef;

    return uuidStr;
}

__bridge_transfer用在将CoreFoundation对象转换成Foundation对象,用于进行内存管理权移交,手动变自动,所以创建的对象交给了ARC去管理,就不用手动释放了。

四、三种示例
/* ARC管理的Foundation对象 */
        NSString *s1 = @"string";
        //转换后依然由ARC管理释放
        CFStringRef cfstring = (__bridge CFStringRef)s1;
        //开发者手动管理的CoreFoundation对象,需要手动释放
        CFStringRef s2 = CFStringCreateWithCString(NULL, "string", kCFStringEncodingASCII);
        //转换后依然需要开发者手动管理释放
        NSString *fstring = (__bridge NSString*)s2;
        //手动释放CFRelease(s2);
        
        
 /* 转换后改由ARC管理对象的释放,不用担心内存泄露 */
        NSString *fstring1 = (__bridge_transfer NSString*)s2;
        //等效于
        //NSString *fstring1 = (NSString*)CFBridgingRelease(s2);
        
        
 /* 转换后ARC不再继续管理,需要手动释放 */
        CFStringRef cfstring1 = (__bridge_retained CFStringRef)s1;
        //等效于
        //CFStringRef cfstring1 = (CFStringRef)CFBridgingRetain(s1);

还有一篇 iOS __bridge那些事讲的也很详细,可以参考一下。

python image模块_python-- Image 模块
weixin_39812046的博客
11-29 2118
mage 模块提供了同名的类用来表示PIL的图像。Image模块还提供了许多工厂(factory)函数,包块从文件加载图像的函数,以及创建新图像的函数。例子下面的脚本加载了一个图像,并把它旋转了45度,然后调用外部的查看器(通常在Unix下是xv,Windows下是paint)。打开,旋转,和显示图像(使用默认的查看器)from PIL import Imageim = Image.open("b...
python3 image模块_python image模块
weixin_39895977的博客
11-29 928
Image 模块Image 模块提供了同名的类用来表示PIL的图像。Image模块还提供了许多工厂(factory)函数,包块从文件加载图像的函数,以及创建新图像的函数。例子下面的脚本加载了一个图像,并把它旋转了45度,然后调用外部的查看器(通常在Unix下是xv,Windows下是paint)。打开,旋转,和显示图像(使用默认的查看器)from PIL import Imageim = Imag...
qq_seconds.html,qq英语签名
weixin_32349711的博客
06-30 1250
1、Happy is the man who is living by his hobby.醉心于某种癖好的人是幸福的。2、Better by far you should forget and smile than that you should remember and be sad.与其伤心回忆,不如微笑遗忘。3、I never stopped loving you, I just stop...
python图形模块_Python---Image 模块
weixin_39668282的博客
11-23 364
Image 模块Image模块提供了同名的类用来表示PIL的图像。Image模块还提供了许多工厂(factory)函数,包块从文件加载图像的函数,以及创建新图像的函数。例子下面的脚本加载了一个图像,并把它旋转了45度,然后调用外部的查看器(通常在Unix下是xv,Windows下是paint)。打开,旋转,和显示图像(使用默认的查看器)from PIL import Imageim = Image...
网络编程_8(项目附件)
weixin_38717634的博客
01-13 3万+
dict.txt abandonment n.放弃 abbreviation n.缩写 abeyance n.缓办,中止 abide v.遵守 ability n.能力 able adj.有能力的,能干的 abnormal adj.反常的,变态的 aboard adv.船(车)上 abolish v.废除,取消 abolition n.废除,取消 abortion n.流产 abortive adj.无效果的,失败的 about prep.关于,大约 ab
电子词典(基于TCP协议多进程通信和数据库)
最新发布
Bzboy_Beizhi9527的博客
07-31 4650
【代码】电子词典(基于TCP协议多进程通信和数据库)
英语单词音近形似转化规律研究
02-18 1万+
英语对我们搞IT的人来说实在太重要了,你还在为记不住英语单词而苦恼吗?还在为看不懂thinking in java而伤神吗?看看我最近的研究,也许对你有些启发呢!基于英国国家语料库中最常见的18299个英语单词进行分析,如 b - p rule 表示“将单词中的b字母转化为p字母”,后面的total number是表示转化之后的单词有多少个是在这18299个词范围内,可以点击单词链接在爱词霸中...
iOS静态分析Analyze、内存泄漏Leaks分析
如鱼得水的专栏
08-18 941
iOS日常开发中,内存管理十个很重要的话题和注意事项。 在老的iOS版本中,都是手动管理内存(MRC),要时刻注意着内存的开辟和释放,很容易造成内存泄漏。ARC(自动引用计数)是iOS5、macOS10.7引入的内存管理技术,它使我们的开发更省心,不用去关注内存的释放,都交给了AutoReleasePool去管理。 MRC和ARC在其他的文章介绍了,在这就不多阐述了。有了ARC就一定不会造成内存...
较全的python-Image模块功能
白头码客
06-28 9802
Image 模块Image 模块提供了同名的类用来表示PIL的图像。Image模块还提供了许多工厂(factory)函数,包块从文件加载图像的函数,以及创建新图像的函数。  例子 下面的脚本加载了一个图像,并把它旋转了45度,然后调用外部的查看器(通常在Unix下是xv,Windows下是paint)。  打开,旋转,和显示图像(使用默认的查看器)  from PIL import Image i...
python-- Image 模块
weixin_34167819的博客
02-25 530
mage 模块提供了同名的类用来表示PIL的图像。Image模块还提供了许多工厂(factory)函数,包块从文件加载图像的函数,以及创建新图像的函数。 例子 下面的脚本加载了一个图像,并把它旋转了45度,然后调用外部的查看器(通常在Unix下是xv,Windows下是paint)。 打开,旋转,和显示图像(使用默认的查看器) from...
字典查询(部分)
热门推荐
myth_HG的专栏
05-28 14万+
#include #include #include using namespace std; const int enMax=46; const int chMax=256; const int attrMax = 66; const int spaceMax = 100; const int inputMax = 30; char atrrSum[13][attrMax]= {"n.","
Sqlite修改数据库表名修改、增加字段
如鱼得水的专栏
07-02 4万+
SQLite 仅仅支持 ALTER TABLE 语句的一部分功能,我们可以用 ALTER TABLE 语句来更改一个表的名字,也可向表中增加一个字段(列),但是我们不能删除一个已经存在的字段,或者更改一个已经存在的字段的名称、数据类型、限定符等等。         改变表名 - ALTER TABLE 旧表名 RENAME TO 新表名         增加一列 - ALTER TABLE 表
H5页面WebView在iPhoneX的适配
如鱼得水的专栏
05-03 1万+
1.  iPhoneX的介绍屏幕尺寸    我们熟知的iPhone系列开发尺寸概要如下:△ iPhone各机型的开发尺寸转化成我们熟知的像素尺寸:△ 每个机型的多维度尺寸倍图其实就是像素尺寸和开发尺寸的倍率关系,但这只是外在的表现。倍图核心的影响因素在于PPI(DPI),了解屏幕密度与各尺寸的关系有助于我们深度理解倍率的概念:《基础知识学起来!为设计师量身打造的DPI指南》iPhone8在本次升级...
Core Animation之CATransform3D:矩阵变换3D旋转
如鱼得水的专栏
04-28 1万+
关于图层的几个坐标系。 对于ios来说,坐标系的(0,0)点在左上角,就是越往下,Y值越大。越往右,X值越大。 一个图层的frame,它是position,bounds,anchorPoint和transform属性的一部分。 设置一个新的frame将会相应的改变图层的position和bounds,但是frame本身并没有保存。 position:是一个CGP
mac上mysql不能插入中文问题
如鱼得水的专栏
07-13 6822
编码问题需要设置成统一的编码格式才行,命令行进去mysql mysql -u root -p 输入命令查看当前数据库的编码格式: show variables like 'character_set_%'; 如果和下面一致就没问题: mysql> show variables like 'character_set_%'; +--------------------------
Xcode6的新特性、iPhone6和iPhone6Plus的适配
如鱼得水的专栏
09-15 6076
今年苹果发布会已经结束,但人们貌似对iPhone6和iPhone6plus不太感兴趣,而对iWatch非常期待。这次苹果一次发布两种屏幕大小的手机,而且与之前的机型的屏幕大小都不一样。这对开发者来说,无疑是最担心的事了,之前的app在iPhone6和iPhone6Plus上会不会布局全乱了呢?         不用担心苹果肯定会考虑到这些问题的:    虽然屏幕分辨率变了很多,但是
图片转换base64字符串及字符串反转回图片
如鱼得水的专栏
04-21 5578
最近做一个上传图片功能时,后台让把图片转成字符串后上传,感到很不解。。。     后来在网上查到一些资料,还真有这么搞的,但不知道意义何在,有什么好处呢?知道的小伙伴给回复下啊     顺便把字符串和图片互转的方法贴在这,就是把base64Encoding编码的字符串作为中介: 图片转base64串:     UIImage *_originImage = [UIIma
预览doc、xslx等Office文档和pdf以及Quicklook中QLPreviewController
如鱼得水的专栏
05-20 5129
在app中我们有时候需要查看一些电脑上的文件,比如常用的Office文件和pdf等,首先想到的是试试用UIWebView加载文件,其实还有一种方法就是用iOS4.0及之后的SDK自带的一种预览的视图控制器来打开文件。但是注意,不管是用上面哪种方法,都不能修改打开的文件,只能是个预览的作用; 方法一: 用UIWebView加载文件 -(void)loadDocument {  
Apple Watch开发(三)--WatchKit简介和Watch适配、布局
如鱼得水的专栏
04-27 5121
上篇简单介绍了创建了一个Apple Watch开发的project的过程,那么对于新生成的文件有什么用呢?老项目怎么适配Apple Watch呢?下面我就来简单介绍下WatchKit和Watch项目中的文件作用、及其布局特点。   一、 旧项目适配Apple Watch        普通老项目可以添加Apple Watch吗?需要注意什么?有些人直接在旧的项目中,按照上篇写的那样去添加一个
Bridegroom、aunty、bride的静态代理
05-04
静态代理是指在编译期间就已经确定好代理关系的代理方式。在这种代理方式中,代理对象与被代理对象需要实现同一个接口,代理对象负责将请求转发给被代理对象处理。 下面是Bridegroom、aunty、bride的静态代理的示例代码: 首先定义一个接口: ```java public interface Marry { void marry(); } ``` Bridegroom实现Marry接口: ```java public class Bridegroom implements Marry { @Override public void marry() { System.out.println("Bridegroom is ready to get married"); } } ``` Aunty实现Marry接口并作为Bridegroom的代理类: ```java public class Aunty implements Marry { private Marry bridegroom; public Aunty(Marry bridegroom) { this.bridegroom = bridegroom; } @Override public void marry() { System.out.println("Aunty is helping the bridegroom to get ready"); bridegroom.marry(); } } ``` Bride实现Marry接口并作为Bridegroom的代理类: ```java public class Bride implements Marry { private Marry bridegroom; public Bride(Marry bridegroom) { this.bridegroom = bridegroom; } @Override public void marry() { System.out.println("Bride is getting ready for the wedding"); bridegroom.marry(); } } ``` 客户端代码: ```java public class Client { public static void main(String[] args) { Marry bridegroom = new Bridegroom(); Marry aunty = new Aunty(bridegroom); Marry bride = new Bride(aunty); bride.marry(); } } ``` 运行结果: ``` Bride is getting ready for the wedding Aunty is helping the bridegroom to get ready Bridegroom is ready to get married ```
写文章

热门文章

  • 连接mysql报错:error 2003 (hy000):can't connect to mysql server on 'localhost' (10061) 40638
  • Sqlite修改数据库表名修改、增加字段 40554
  • iOS8推送消息的快速回复处理 22165
  • H5页面WebView在iPhoneX的适配 16155
  • Core Animation之CATransform3D:矩阵变换3D旋转 15571

分类专栏

  • iOS编程 153篇
  • Apple Watch 3篇
  • swift 3篇
  • 网络开发 13篇
  • iOS8 17篇
  • xmpp 4篇
  • AppStore相关 18篇
  • iMac 6篇
  • Wax Lua 6篇
  • C/C++ 3篇
  • cocos2d 1篇
  • cocos2d-x
  • PHP 4篇
  • Java 6篇
  • html5 1篇
  • Android 2篇
  • 数据库 12篇
  • 电脑 27篇
  • 笔记 61篇
  • 杂谈 3篇

最新评论

  • 黑客 cmd大全

    ꧁: at /delete 这个是不是可以理解为封号表情包

  • 图片转换base64字符串及字符串反转回图片

    安静805: 你好 请问这个怎么用

  • Runtime动态创建一个类和修改方法的操作

    HiccupTang: 将class,改成object_getClass(class)即获取元类,即可替换类方法。因为类方法存放在元类里面

  • H5页面WebView在iPhoneX的适配

    weixin_43876114: constant在编辑器报错是什么鬼

  • iOS监听多个异步请求全部返回和多任务下载

    qq_45284475: 我想看到别人微信聊天有没有这方面软件吗?

大家在看

  • 212号资源-源程序:差异进化算法(Differential Evolution,DA)-----已提供下载资源
  • Java毕业设计-基于Springboot框架的校园体育场馆设施使用管理网站系统项目实战(附源码+论文) 622
  • PHP甲亢患者管理系统-计算机毕业设计源码86591 335
  • xingzige/基于Netty框架的云快充协议+云快充协议1.5+桩直连协议+充电桩系统
  • C++基础输入输出格式

最新文章

  • 使用shell脚本自动合并framework
  • 使用xcworkspace调试framework源码
  • iOS创建framework静态库(SDK&组件化)
2020年3篇
2019年15篇
2018年2篇
2017年3篇
2016年8篇
2015年35篇
2014年116篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家濮阳校园玻璃钢雕塑制造海洋生物玻璃钢雕塑玻璃钢雕塑高度汕尾广场玻璃钢雕塑广东园林玻璃钢雕塑价格洛宁玻璃钢雕塑费用上海玻璃钢人物雕塑制作厂家山东超市商场美陈哪里有镂空校园玻璃钢景观雕塑报价大型玻璃钢雕塑厂家服务至上许昌城市玻璃钢雕塑定做透明玻璃钢雕塑厂家工厂临高县玻璃钢雕塑厂家西藏市政玻璃钢花盆沈阳玻璃钢卡通动漫雕塑高碑店玻璃钢雕塑公司从化情景玻璃钢人物雕塑一键成交儿童乐园玻璃钢雕塑厂家向日葵玻璃钢雕塑模型孟津玻璃钢雕塑费用海宁玻璃钢雕塑厂家商场美陈吊饰叶县玻璃钢雕塑加工厂家天门玻璃钢树脂雕塑报价玻璃钢恐龙雕塑单价浙江公园玻璃钢雕塑多少钱汕尾仿真玻璃钢雕塑合肥景区玻璃钢雕塑定制曲阳玻璃钢雕塑招聘镇江玻璃钢卡通雕塑设计香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化