`

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
分享到:
评论

相关推荐

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

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

    iSwift 4.0 Objective-C转换Swift代码工具

    iSwift 是一款Mac上实用的Objective-C转换Swift代码工具,可以方便的将Objective-C代码转换为Swift代码,修复了大量问题,增加了Core Foundation等库,iSwift支持直接拖拽文件,简单易用,很实用的一款开发辅助工具...

    corejava培训文档

    17.3.1. 在基本数据类型和封装类之间的自动转换 17.4. 类型安全的枚举 17.5. 静态引入 17.6. C风格的格式化输出 17.7. Building Strings(StringBuilder类) 17.8. 可变长的参数 17.9. JAVA5.0 的注释 (Annotation...

    API Monitor v2.0 (Alpha 7) 汉化版

    添加了 Core Audio, Microsoft Media Foundation, Network List Manager, Windows Property System, Kernel Transaction Manager, Windows Genuine Advantage, Transactional NTFS, Pipes 和 Uniscribe 的API定义 ...

    puppet-transmart_core:TranSMART的人偶模块

    TranSMART是由维护的用于转化生物医学研究的开源数据共享和分析平台。 可以在TranSMART Foundation网站上找到正式版本,而TranSMART Foundation的开发存储库可以在上找到。 该模块创建系统用户transmart和tsloader...

    libnyquist:跨平台C ++ 11库,用于解码音频(mp3,wav,ogg,opus,flac等)

    为了实现可移植性,libnyquist不会链接到特定于平台的API,例如Windows Media Foundation或CoreAudio,而是将参考解码器的源代码捆绑为实现细节。 Libnyquist是要静态链接的,而其他流行的库(如libsndfile(根据...

    iOS、Mac OS X系统中编程实现汉字转拼音的方法(超级简单)

    其实Core Foundation也提供了一种方案,而且还带声调! 代码如下:  NSMutableString *ms = [[NSMutableString alloc] initWithString:@”我是中国人”];  if (CFStringTransform((__bridge CFMutableStringRef)ms...

    《Intel C++ 编译器Windows版》(Intel.C.Plus.Plus.Compiler.v10.0.026)

    这个由10.0版本而来得新的革命性的能力,组合了向量化、并行化和循环转化到一个比先前分散模块更快、更有效率和更可靠的单个过程。 * Interprocedural Optimization (IPO) 大幅的改善了被频繁使用的中小规模函数的...

    corejavaNoteBook

    17.3.1. 在基本数据类型和封装类之间的自动转换 17-69 17.4. 类型安全的枚举 17-70 17.5. 静态引入 17-71 17.6. C风格的格式化输出 17-72 17.7. Building Strings(StringBuilder类) 17-73 17.8. 可变长的参数 17-73 ...

    MFC的程序框架剖析

    1、MFC(Microsoft Foundation Class,微软基础类库)是微软为了简化程序员的开发工作所开发的一套C++ 类的集合,是一套面向对象的函数库,以类的方式提供给用户使用 2、MFC AppWizard是一个辅助我们生成源代码的...

Global site tag (gtag.js) - Google Analytics