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

最近碰到了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 transfers a pointer between Objective-C and Core Foundation with no transfer of ownership.
    • __bridge_retained or CFBridgingRetain casts an Objective-C pointer to a Core Foundation pointer and also transfers ownership to you.

      You are responsible for calling CFRelease or a related function to relinquish ownership of the object.

    • __bridge_transfer or CFBridgingRelease moves a non-Objective-C pointer to Objective-C and also transfers ownership to ARC.

      ARC is responsible for relinquishing ownership of the object.

意思就是:

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

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

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

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

时间: 2024-10-13 03:25:33

__bridge,__bridge_retained和__bridge_transfer的意思,区别与使用的相关文章

[Objective-C]__bridge,__bridge_retained和__bridge_transfer的意思,区别与使用

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

iOS 开发之__bridge __bridge_retained 和 __bridge_transfer的区别

简介:__bridge:实现id类型与void*类型的相互转换: __bridge_retained:类型被转换时,其对象的所有权也将被变换后变量所持有 __bridge_transfer:类型被转换时,其对象的所有权也将被释放 __bridge_retained 是编译器替我们做了 retain 操作,而 __bridge_transfer 是替我们做了 release1. 详情: 在iOS世界,主要有两种对象:Objective-C 对象和 Core Foundation 对象0.Core

__bridge,__bridge_retained,__bridge_transfer

最近再看CoreText其中有很多地方需使用了__bridge或者CFBridgingRelease 作为菜鸟不太理解什么意思于是百度了下大体回答是这样的 CFObject和NSObject转换的问题,由于ARC不能管理Core Foundation Object的生命周期,所以在Core Foundation和ARC之间,我们需要使用到__bridge,__bridge_retained和__bridge_transfer三个转换关键字. __bridge只做类型转换,但是不修改对象(内存)管

浅解ARC中的 __bridge、__bridge_retained和__bridge_transfer

文章来源:http://www.outflush.com/2015/03/introduction-of-arc-bridge-type-transfer/ 在对 bridge 相关的修饰符解说前.首先了解下面内容 Core Foundation 是一组C语言接口.它与Foundation为相同功能提供接口.仅仅是Foundation框架提供的是Objective-C接口. Core Foundation中的对象也存在引用计数的概念,相似于Foundation的retain/release,其相

__bridge __bridge_retained __bridge_transfer

__bridge只做类型转换,但是不修改对象(内存)管理权: __bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象: __bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC

object-c 的ARC 问答/介绍

原文:http://blog.csdn.net/kmyhy/article/details/8895606 概念" Clangstatic analyzer "是一个非常有用的查找代码中内存管理错误的工具.我在查看这个分析器的输出时经常会想,"既然你能找出错误,为什么就不能修正错误呢?" 实际上,这就是ARC的作用.编译器中包含了内存管理规则,但只能简单地由它自己来调用,无法帮助程序员查找错误. ARC介于自动垃圾回收(GC)和手动内存管理之间.就像垃圾回收,ARC

Objective-C 学习笔记<二>

使用ARC能帮我们减轻不少内存管理方面的负担,尤其是对用惯了Java的程序员来说. 最近,在做获取本地通讯录时,遇到CFObject和NSObject转换的问题,由于ARC不能管理Core Foundation Object的生命周期,所以在Core Foundation和ARC之间,我们需要使用到__bridge,__bridge_retained和__bridge_transfer三个转换关键字. 在苹果官方文档,我们找到了: If you cast between Objective-C

Objective-C Memory Management 内存管理 2

Objective-C Memory Management?内存管理? 2? 2.1 The Rules of Cocoa Memory Management 内存管理规则 (1)When you create an object using new, alloc, or copy, the object has aretain count of 1. You are responsible for sending the object a release or autorelease mess

__bridge,__bridge_transfer和__bridge_retained的使用和区别【转载】

Core Foundation 框架Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能.下面列举该框架支持进行管理的数据以及可提供的服务: 群体数据类型 (数组.集合等)程序包字符串管理日期和时间管理原始数据块管理偏好管理URL及数据流操作线程和RunLoop端口和soket通讯Core Foundation框架和Foundation框架紧密相关,它们为相同功能提供接口,但Foundation