`

Foundation和CoreFoundation间的转换

阅读更多

ARC下的内存管理

 
ARC的诞生大大简化了我们针对内存管理的开发工作,但是只支持管理 Objective-C 对象, 不支持 Core Foundation 对象。Core Foundation 对象必须使用CFRetain和CFRelease来进行内存管理。那么当使用Objective-C 和 Core Foundation 对象相互转换的时候,必须让编译器知道,到底由谁来负责释放对象,是否交给ARC处理。只有正确的处理,才能避免内存泄漏和double free导致程序崩溃。
 
根据不同需求,有3种转换方式
  • __bridge                   (不改变对象所有权)
  • __bridge_retained 或者 CFBridgingRetain()               (解除 ARC 所有权)

  • __bridge_transfer 或者 CFBridgingRelease()             (

    给予 ARC 所有权)

 

1. __bridge_retained 或者 CFBridgingRetain() 

__bridge_retained 或者 CFBridgingRetain()  将Objective-C对象转换为Core Foundation对象,把对象所有权桥接给Core Foundation对象,同时剥夺ARC的管理权,后续需要开发者使用CFRelease或者相关方法手动来释放对象。

2. __bridge_transfer 或者 CFBridgingRelease()

__bridge_transfer 或者 CFBridgingRelease()  将非Objective-C对象转换为Objective-C对象,同时将对象的管理权交给ARC,开发者无需手动管理内存。
 

3. __bridge 

__bridge 只做类型转换,不改变对象所有权,是我们最常用的转换符。
 
0
0
分享到:
评论

相关推荐

    Core_Foundation_Framework_Reference

    Apple开发的Core Foundation框架是一个底层的C语言框架,提供了广泛的数据类型、函数和常量,用于支持基本的数据管理、集合、字符串处理等任务。该框架在应用程序的性能和灵活性方面扮演着重要角色,它为开发者提供...

    IOS开发系列—Objective-C之Foundation框架 - KenshinCui - 博客园.pdf

    Foundation框架中的`NSDictionary`和`NSMutableDictionary`提供了相应的功能,支持添加、删除和查找键值对。 #### 装箱和拆箱 装箱和拆箱是指将基本数据类型转换为对应的对象类型(装箱)或将对象类型转换回基本...

    Foundation 2.1i 版中文教程

    - **布局布线优化**:显著减少了时序驱动下的布局与布线运行时间,同时设计转换和反向注释等操作的执行速度提高了6-10倍。 - **时序分析改进**:引入了新的时序分析算法,有助于更好地管理和解决由大规模设计引起的...

    SwiftCF:用于CoreFoundation的Swift面向协议的结构(支持带有CFLiteLinux)

    6. **安全性**:Swift是一种类型安全的语言,SwiftCF通过协议和类型转换确保了与CoreFoundation交互时的类型安全,避免了潜在的运行时错误。 通过SwiftCF,开发者可以在Swift中以更现代、更安全、更符合Swift编程...

    ios-Foundation框架.pdf

    Foundation框架与其他iOS框架紧密相连,例如UIKit、Core Data等,共同构成了iOS开发的基础。 根据提供的文档信息,我们可以深入探讨以下几个关键类: 1. **NSArray** 2. **NSAssertionHandler** 3. **...

    iOS特殊字符处理

    Foundation框架和CoreFoundation框架提供了强大的支持来处理这些字符,确保数据的安全性和一致性。下面我们将详细探讨这两个框架中的编码解码机制。 首先,让我们关注Foundation框架。Foundation是iOS和macOS开发中...

    C 指针和OC 对象之间的转换方法

    Core Foundation 框架 (CoreFoundation.framework) 是一组 C 语言接口, 简称 CF. 它们为 iOS 应用程序提供基本数据管理和服务功能. 如 Core Graphics、Core Text,并且我们可能需要将 CF 对象和OC 对象进行相互转化...

    CoreJSON:Core Foundation,基于libyajl的JSON支持

    CoreJSON是苹果公司提供的一款基于Core Foundation框架的JSON(JavaScript Object Notation)解析库,它在OS X和iOS平台上提供了高效、稳定的方式来处理JSON数据。这个库是建立在libyajl库的基础之上,libyajl是一个...

    objc代码-Objc : Core Fundation 竟然不能运行

    确保在Xcode的Build Phases设置中,你的目标已链接了Foundation和CoreFoundation框架。如果缺失,添加它们即可解决。 2. **导入错误**:检查你的代码是否正确导入了必要的头文件,例如`#import <CoreFoundation/...

    AV Foundation开发秘籍 实践掌握iOS&OSX;应用的视听处理技

    AV Foundation是Apple提供的一个高级多媒体框架,它为开发者提供了处理音频和视频的强大功能,包括播放、录制、编辑、转换和流媒体等。这个框架不仅支持基础的媒体播放,还能实现复杂的多媒体交互和处理任务,如实时...

    VisualStudio(2005,2008,2010,2012,2013)版本间转换

    - **转换工具**:为了在不同版本间转换项目,Microsoft提供了一个名为"Upgrade Wizard"的工具,它可以帮助升级项目文件(.csproj或.vbproj)和解决方案文件(.sln)。然而,这个工具并不总是完美的,可能会丢失某些...

    Windows Presentation Foundation(WPF) Unleashed

    - **第8章:动画和转换**:介绍WPF中动画和转换的实现方式。 - **第9章:文档和打印**:讲解WPF在文档处理和打印方面的功能。 - **第10章:3D图形**:介绍如何在WPF中实现三维图形渲染。 #### 结论 《Windows ...

    air_core.dll

    "air_core.dll"集成了色彩空间转换算法,确保图像在不同设备间的颜色一致性。它支持ICC色彩配置文件,能够精确地处理颜色校正,以达到专业级别的色彩还原效果。 3. **滤镜效果**:"air_core.dll"提供了丰富的滤镜库...

    AV Foundation开发秘籍_实践掌握iOS&OS; X应用的视听处理技术 源码

    AV Foundation是Apple为iOS和macOS平台提供的一套强大的多媒体处理框架,用于处理音频、视频以及图像内容。这本书“AV Foundation开发秘籍”通过实践案例深入讲解了如何利用该框架来构建视听应用。清华大学出版社...

    CoreJava学习笔记

    ### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...

    汉字转成拼音

    #import <CoreFoundation/CoreFoundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSString *chineseString = @"汉字转成拼音"; CFMutableStringRef mutableString = ...

    iphone 手机通讯录有关访问

    由于AddressBook框架使用Core Foundation的数据类型,因此在处理数据时,开发者需要进行类型转换,并且遵循Core Foundation的内存管理规则,比如使用`CFRetain`和`CFRelease`来管理对象的引用计数。 ### ...

    libFoundation - MacOS X Foundation-开源

    例如,它支持 Core Data、Cocoa Bindings、Key-Value Coding 和 Key-Value Observing 等高级特性,这些都极大地提升了 MacOS X 应用程序的开发效率和灵活性。 **开源软件** 作为开源软件,`libFoundation` 的源...

Global site tag (gtag.js) - Google Analytics