内存管理(Core Foundation object和Objective - C转换)__bridge,__bridge_retained和__bridge_transfer

Objective-C 和 Core Foundation 对象相互转换的内存管理总结 Objective-C 和 Core Foundation 对象相互转换的内存管理总结iOS允许Objective-C 和 Core Foundation 对象之间可以轻松的转换,拿 NSString 和 CFStringRef 来说,直接转换豪无压力:CFStringRef aCFString = (CFStringRef)aNSString; NSString *aNSString = (NS 阅读详情
使用ARC能帮我们减轻不少内存管理方面的负担,但是arc也有其不足之处。

最近碰到了CFObject和NSObject转换的问题,由于ARC不能管理Core Foundation Object的生命周期,所以在Core Foundation和ARC之间,我们需要使用到__bridge,__bridge_retained和__bridge_transfer三个转换关键字。

根据苹果官方的文档(https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html):

__bridge只做类型转换,但是不修改对象(内存)管理权;

__bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象;

__bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC。

深入了解Objective-C 和 Core Foundation 对象相互转换(_bridge) Foundation框架是使用OC实现的。 Core Foundation是使用C实现的,它们为iOS应用程序提供基本数据管理和服务功能; Foundation 对象和 Core Foundation对象间的转换:俗称桥接 bridge 针对内存管理问题,ARC 可以帮忙管理 Objective-C 对象, 但是不支持 Core Foundation 对象的管理,所以转换后要注意一个问题:谁 阅读详情

相关推荐

理解__bridge,__bridge_transfer和__bridge_retained

=================以下未经说明,都是在ARC环境下============== 在Cocoa应用程序中,我们常常会使用到Core Foundation-style objects,例如CFArrayRef 或者 CFMutableDictionaryRef等等 编译器不会自动管理Core Foundation-style objects的生命周期,你必须根据Core Fou

小T是我 3484

objective-c中__bridge,__bridge_retained和__bridge_transfer区别

使用ARC 能帮我们减轻不少内存管理方面的负担,但对于CFObject和NSObject转换的问题,由于ARC不能管理Core Foundation Object的生命周期,所以在Core Foundation 和ARC 之间,我们需要使用到__bridge,__bridge_retained和__bridge_transfer三个转换关键字。   __bridge 只做类型转换,但是不

passion_wu128的专栏 856

iOS基础:【ARC下的内存管理】 Foundation对象与Core Foundation对象有什么区别?

前言ARC只支持管理 Objective-C 对象, 不支持 Core Foundation 对象。Core Foundation 对象必须使用CFRetain和CFRelease来进行内存管理。 那么当使用Objective-C 和 Core Foundation 对象相互转换的时候,必须让编译器知道,到底由谁来负责释放对象,是否交给ARC处理。根据不同需求,有3种转换方式 __bridge

专注于计算机研发知识和资讯分享 1万+

__bridge,__bridge_retained和__bridge_transfer的意思,区别与使用

使用ARC能帮我们减轻不少内存管理方面的负担,尤其是对用惯了Java的程序员来说。但是像我这种Java基础本身就不牢固,做了两年的iOS已经习惯手动管理内存的半吊子,使用ARC还是经常碰壁。 最近碰到了CFObject和NSObject转换的问题,由于ARC不能管理Core Foundation Object的生命周期,所以在Core Foundation和ARC之间,我们需要使用到__brid...

mmdev 314

swift-ReactiveObjCBridge一个ReactiveObjC和ReactiveSwift之间的桥梁

在苹果发布 Swift 语言之后,ReactiveCocoa 使用 Swift 进行了重写。该框架创建了一个桥用来连接 Swift 和 Objective-C API

Simulink玩转PMSM无感FOC:从IF强拖参数调试到切换失败的避坑指南

本文深入探讨了Simulink在PMSM无感FOC控制中的IF强拖启动参数调试与切换避坑技巧。通过详细解析强拖加速、速度维持和闭环切换三大阶段的设计逻辑,以及五个常见陷阱的解决方案,帮助工程师快速定位启动失败和切换震荡问题。文章还提供了典型故障的波形诊断方法和高级调试工具链优化建议,是电机控制领域的实用指南。

weixin_29164843的博客 408

objective-C bridge

Core Foundation 和 NSObject 对象的内存管理。因为NSObject 的对象都引入了ARC来管理内存。 而CoreFoundation是没有使用ARC的。所以在CoreFoundation和NSObject对象转换的时候,就需要明确对象的管理权交给谁去控制,避免对象没人控制释放,导致内存泄露,或者对象被多次释放,造成程序崩溃。__bridge_transfer:给予 AR...

品一天乐的博客 262

MATLAB控制信号发生器(USB-GPIB-HS)GPIB仪器控制教程(含matlab代码)

自动化测试时需要自动产生信号,通过matlab控制信号发生器的频率与功率,以实现自动化信号生成输出

qq_43686057的博客 1606

Objective-C 初阶 —— __bridge & __bridge_retained & __bridge_transfer

本文介绍了ARC(自动引用计数)与MRC(手动引用计数)的概念,以及三种桥接方式(__bridge、__bridge_retained、__bridge_transfer)的使用场景和引用计数变化。ARC自动管理引用计数,而MRC需手动调用retain/release。__bridge仅进行类型转换,不改变引用计数;__bridge_retained会增加MRC侧引用计数;__bridge_transfer会将MRC引用计数转移至ARC侧。文章通过代码示例直观展示了不同桥接方式下引用计数的变化情况,帮助开发

m0_73093743的博客 572

Keil5安装包别乱下!手把手教你从官网精准下载C51/V960和MDK5,并完成2032年有效注册(避坑网络资源失效)

本文详细介绍了如何从Keil官网安全下载C51 V9.60和MDK5开发环境,并提供2032年有效注册的完整指南。通过验证安装包完整性、自定义安装路径和长期激活方案,帮助开发者避开网络资源陷阱,搭建稳定的STM32开发环境。

weixin_26886855的博客 534

Arcgis使用NDVI值遥感反演叶面积指数(LAI)

经验模型反演操作不难,主要是要多看文献,了解公式。本文中的公式我也不清楚是哪个作物的NDVI和LAI的关系(别人提供的),继续看文献整理吧。后续会在下面罗列更新一下主要公式。

所有专家都曾始于新手 8430

关于 __bridge、 _bridge_retained 、__bridge_transfer的正确理解

“_ _ bridge_retained 转换”和 “_ _ bridge_transfer转换” id obj = [[NSObject alloc] init]; void *p = (__bridge_retained void *)obj; _ _ bridge_retained 转换可使要转换赋值的变量也持有所赋值的对象。下面我们来看ARC 无效时的源代码是如何编写的。 /*

有志者事竟成 756

2025年华为杯D题:低空湍流监测及最优航路规划思路与Matlab实现

2025年华为杯D题:低空湍流监测及最优航路规划思路与Matlab实现

前程算法屋的博客 772

ARC中__bridge, __bridge__transfer, __bridge_retained 关系

转在开头:转在这篇文章是因为我遇到一个问题,这篇文章解决了我这个问题,debug:cast of objective- c pointer type 'NSMutableDictionary *' to C pointer ----——同时向此文的原作者致敬! 总结于 I...

chengzhuichi6662的博客 248

Python库CloudScraper详细使用(绕过 Cloudflare 的反机器人页面的 Python 模块)

CloudScraper是一个专门用于绕过Cloudflare反机器人保护的Python库,它基于requests库构建,能够处理Cloudflare的5秒盾、WAF和人机验证等防护机制。

数据知道的博客 1万+

YOLOv8与注意力机制融合:EMA(高效多维注意力)的原理剖析与实战应用

本文介绍了如何在YOLOv8目标检测模型中集成EMA(高效多尺度注意力)机制。主要内容包括:EMA注意力机制的工作原理解析,展示其多尺度特征融合和高效计算特性;详细的环境配置与依赖安装指南;EMA模块的完整代码实现,包含分组处理、空间注意力权重计算和特征融合等关键步骤;以及将EMA集成到YOLOv8网络结构的方法。通过添加EMA模块,可以提升模型对关键特征的关注能力,有效抑制背景干扰,从而增强目标检测性能。本教程提供了从原理到实现的完整解决方案。

m0_64661770的博客 147

Objective-C:Objective-C 和 Core Foundation 对象相互转换的内存管理

Objective-C 和 Core Foundation 对象相互转换的内存管理 iOS允许Objective-C 和 Core Foundation 对象之间可以轻松的转换,拿 NSString 和 CFStringRef 来说,直接转换豪无压力: CFStringRef aCFString = (CFStringRef)aNSString; NSString *aNSS...

dienangpiao2051的博客 119

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

iOS中的__bridge,__bridge_transfer和__bridge_retained

OC对象与CF对象的桥接一、Core Foundation框架与Foundation框架类型之间的桥接Core Foundation框架是C语言接口,而Foundation使用OC语言,在同时使用时,数据类型会有差异,我们可能需要OC与CF之间进行相互转化,这时我们就需要__bridge系列声明。1、OC转CF,__bridge、__bridge_retained声明假设一个类型转化的场景,例如:N

zramals的博客 521

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OC对象与Core Foundation对象的转换

OC对象使用了ARC,自动释放内存,但是CF中的对象没有ARC,必须要手动进行引用计数和内存释放. 两者对象之间的互相转换有三种形式: 1.__bridge: 直接转换,部改变对象的持有状况: id obj = [NSObject new]; cfObject = (_bridge cfObject) obj; //不改变对象持有状况,cf对象不能获得obj的引用. id obc = (_

四夕日 月 1293

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Core Foundation & Foundation

前言 Core Foundation 是一组 C 语言接口,Foundation 用 Objective-C 封装了 Core Foundation 的 C 组件,并实现了额外了组件供开发人员使用。而 Core Foundation 也有一些 Foundation 没能彻底封装的功能,这些功能是 Core Foundation 特有的。Core Foundation 有 Foundation 没有的功能,比如 CFDictionary 的 Key 元素无需实现 NSCoping 协议、CFArray 可以不

li_tianxng的博客 562

IOS学习笔记65 —— ARC中__bridge, __bridge__transfer, __bridge_retained 关系

Toll-Free Bridging 当你在 Objective-C 和 Core Foundation 对象之间进行转换时,就需要使用 Bridge cast。 今天的多数应用很少需要使用 Core Foundation,大多数工作都可以直接使 用 Objective-C 类来完成。但是某些底层 API,如 Core Graphics 和 Core Text, 都基于 Cor

小武博客 7178
上一篇: Objective - c 运行时关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
下一篇: GCD小结
Allen_iOS
博客等级 码龄12年 3粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值