`

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

    博客分类:
  • ios
 
阅读更多

使用ARC能帮我们减轻不少内存管理方面的负担,尤其是对用惯了Java的程序员来说。使用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。

分享到:
评论

相关推荐

    《Ios组件与框架-iOS SDK 高级特性刨析》代码 全部之ARC部分

    使用`(__bridge)`、`(__bridge_transfer)`和`(__bridge_retained)`可以控制转换时的引用计数行为。 **7. MRC与ARC的切换** 虽然ARC是推荐的内存管理方式,但在某些情况下,可能需要暂时关闭ARC。这可以通过在特定...

    ios5之自动引用计数

    - **所有权关键字函数参数转换**:在使用无费用桥接时,开发者可以通过使用所有权关键字来明确指定函数参数的所有权关系,例如`__bridge`、`__bridge_transfer`和`__bridge_retained`等。 #### 转换项目时常见的...

    OC-Cpp:Objective-C++ C++混合编程

    OC-Cpp 1.在object-c++类中调用c++类 1)ViewController.m--->ViewController.mm 2)#import "OcCallCpp.h" 3)OcCallCpp.h引入C++类头文件,#include "MyCppClass.h" ...6)释放Oc对象,__bridge_transfer

    NX二次开发UF-DRF-is-annotation-retained 函数介绍

    NX二次开发UF_DRF_is_annotation_retained 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的...

    NX二次开发UF-DRF-ask-retained-state 函数介绍

    NX二次开发UF_DRF_ask_retained_state 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业...

    NX二次开发UF-DRF-set-retained-state 函数介绍

    NX二次开发UF_DRF_set_retained_state 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业...

    MQTT异步使用的示例代码

    这个库提供了与MQTT服务器交互所需的函数和结构体。安装过程可能包括编译库文件和设置环境变量,以便编译器能够找到相关的头文件和库。 `Makefile`是构建系统的配置文件,它定义了编译和链接程序的规则。在这个例子...

    MemoryAnalyzer-1.10.0_x86_64.zip

    5. **Shallow Heap / Retained Heap**:区分对象自身占用的内存(shallow heap)和由其间接保持的对象占用的内存(retained heap)。 通过这些功能,MAT可以帮助开发者识别和修复内存泄漏问题,从而提高Java应用的...

    d3drm.dll Direct3D Retained Mode DLL

    **Retained Mode** 模式主要是为了简化2D和3D图形的创建和管理,它允许开发者以对象的形式存储图形,便于修改和重复使用。与之相对的是**Immediate Mode** ,这种模式在每次渲染时都会处理所有的图形指令,更适合于...

    Oracle内存结构研究-PGA篇

    手动 PGA 内存管理需要用户指定排序区和散列区所使用的内存,每个连接使用相同的内存。自动 PGA 内存管理则是 Oracle 根据系统负载决定具体分配的内存。 在手动 PGA 内存管理中,有三个参数对 PGA 影响最大:SORT_...

    使用paho-mqtt-c做的mqtt通讯

    MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,常用于物联网(IoT)设备之间的通信...希望这有助于你理解如何使用`paho-mqtt-c`库实现MQTT通信,并且涵盖了SSL/TLS加密和自动重连功能。

    graphicLibrary123123_source_firmgkc_eatenmb8_ToBeTold_源码.zip

    了解这些接口和类的工作方式对于有效地使用和扩展图形库至关重要。 4. **事件驱动编程**:GUI应用程序通常采用事件驱动模型,即用户操作触发事件,然后事件处理器响应并更新界面。理解事件处理机制是图形库开发的...

    esp8266_update_mqtt_firmware.zip

    用户需要了解基本的MQTT概念,如主题(Topic)、质量等级(QoS)和保留消息(Retained Messages)。此外,可能还需要设置物联网平台的访问凭证,如用户名和密码。 在实际应用中,结合ESP8266的固件升级工具和MQTT...

    retained_undistort_image:源代码以生成未失真的图像,其中保留了所有源图像像素。 实现两种方法(1)使用cv

    项目文件和源代码位于文件夹retained_undistort_image 。 源代码位于文件main.cpp 。 使用MS Visual Studio作为IDE,这需要一些(即OpenCVinclude / lib)才能生成代码。代码说明我们实现了两种方法来产生不失真的...

    swap_state.rar_swap

    `retained to simplify the path`表明`swapper_space`这个术语可能是为了简化理解和实现逻辑而引入的抽象概念。 在Linux内核源码中,`swap_state.c`文件很可能包含了处理交换空间状态的函数和数据结构。以下是一些...

    Outlook 2003 SideBar V2.02 Alpha

    Title: Outlook 2003 SideBar V2.02 Alpha ...The author may have retained certain copyrights to this code...please observe their request and the law by reviewing all copyright conditions at the above URL.

    MemoryAnalyzer-1.10.0.20200225-x86_64最新版.win32.x86_64.zip

    4. **Shallow 和 Retained Size**:分别显示对象本身占用的内存大小和通过该对象导致的内存总消耗,便于评估内存泄漏的影响。 5. **OQL(Object Query Language)**:MAT内置查询语言,允许用户根据自己的需求定制...

    Xcode_Build_Setting_Reference

    This setting controls whether raw binary files should be retained after the build process. Retaining these files can be useful for debugging and performance analysis. ##### STRINGS_FILE_OUTPUT_...

    Oracle9i的init.ora参数中文说明

    说明: 指定与 TO_CHAR 和 TO_DATE 函数一同使用的默认日期格式。该参数的默认值由 NLS_TERRITORY 确定。该参数的值可以是包含在双引号内的任何有效的日期格式掩码。例如: ''MMM/DD/YYYY''。 值范围: 任何有效的日期...

    MQTT_mqtt连接数据库_Mqtt数据库_mqtt_mqttmysql_mqtt与SQL2008.zip

    - MQTT的核心概念包括主题(Topic)、质量服务等级(QoS,Quality of Service)和保留消息(Retained Message)。 2. MQTT连接数据库: - MQTT通常用于实时数据传输,但并不直接处理数据库操作。要将MQTT与数据库...

Global site tag (gtag.js) - Google Analytics