原创文章,欢迎转载。转载请注明:关东升的博客

内存托管对象

Swift中调用CoreFoundation函数获得对象时候,对象分为:内存托管对象和内存非托管对象。

内存托管对象就是由编译器帮助管理内存,我们不需要调用CFRetain函数获得对象所有权,也不需要调用CFRelease函数放弃对象所有权。

获得这些内存托管对象的方法,是采用了CF_RETURNS_RETAINED或CF_RETURNS_NOT_RETAINED注释声明,示例代码:

-(CGPathRef)makeToPathCF_RETURNS_RETAINED
{UIBezierPath* triangle = [UIBezierPathbezierPath];[triangle moveToPoint:CGPointZero];[triangleaddLineToPoint:CGPointMake(self.view.frame.size.width,0)];[triangle addLineToPoint:CGPointMake(0,self.view.frame.size.height)];[triangle closePath];CGPathRef theCGPath = [triangle CGPath];return CGPathCreateCopy(theCGPath);
}

内存托管对象使用起来比较简单,不需要我们做额外的事情。

funcCFStringCreateWithCString(_ alloc: CFAllocator!, _ cStr: UnsafePointer<Int8>,_encoding: CFStringEncoding) -> CFString!  //内存托管对象func CFHostCreateCopy(_alloc: CFAllocator?,_host: CFHost) -> Unmanaged<CFHost>    //内存非托管对象

内存非托管对象

内存非托管对象就是内存需要程序员自己管理。这是由于在获得对象的方法中没有使用CF_RETURNS_RETAINED或CF_RETURNS_NOT_RETAINED注释声明,编译器无法帮助管理内存。在具体使用时候我们可以上一节的方法判断是否为非内存托管对象。

内存非托管对象使用起来有些麻烦,要根据获得所有权方法,进行相应的处理。

1. 如果一个函数名中包含Create或Copy,则调用者获得这个对象的同时也获得对象所有权,返回值Unmanaged<T>需要调用takeRetainedValue()方法获得对象。调用者不再使用对象时候,Swift代码中需要调用CFRelease函数放弃对象所有权,这是因为Swift是ARC内存管理的。

2. 如果一个函数名中包含Get,则调用者获得这个对象的同时不会获得对象所有权,返回值Unmanaged<T>需要调用takeUnretainedValue()方法获得对象。

示例代码如下:

let host: CFHost =CFHostCreateWithName(kCFAllocatorDefault, "127.0.0.1").takeRetainedValue()let hostNames: CFArray =CFHostGetNames(host, nil)!.takeUnretainedValue()

欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

《从零开始学Swift》学习笔记(Day 62)——Core Foundation框架之内存托管对象与非托管对象...相关推荐

  1. 从零开始学STM32(学习笔记——第三天)

    CSDN话题挑战赛第2期 参赛话题:学习笔记 参考文章: [教学文章]STM32内部重要功能全记录 [教学文章]STM32内部核心功能大揭秘 [教学文章]STM32内部重要功能全记录 框架:STM32 ...

  2. IOS学习笔记6—Objective C—Foundation框架

    2019独角兽企业重金招聘Python工程师标准>>> 原文:http://blog.csdn.net/tangren03/article/details/7747281 转载于:h ...

  3. 【从零开始学深度学习编译器】十二,MLIR Toy Tutorials学习笔记一

    本笔记由学习MLIR Tutorials总结而成,欢迎批评指正. Chapter1: Toy语言和AST MLIR提供了一种Toy语言来说明MLIR的定义和执行的流程.Toy语言是一种基于张量的语言, ...

  4. 关东升的《从零开始学Swift》即将出版

    大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版<从零开始学Swift><从零开始学Swift>将在< ...

  5. 关东升的《从零开始学Swift》

    这个博文是swift 2.0的,也是可以参考的 http://blog.csdn.net/tonny_guan/article/category/6139217 文章目录 [置顶] 关东升的<从 ...

  6. 【从零开始学深度学习编译器】十三,如何在MLIR里面写Pass?

    [GiantPandaCV导语]这篇文章是学习了比较久然后按照自己的理解步骤重新总结了下来,主要是MLIR Toy Tutorials第3,4篇文章的内容.这里主要讲解了如何在MLIR中自定义Pass ...

  7. 动手学深度学习笔记3.4+3.5+3.6+3.7

    系列文章目录 动手学深度学习笔记系列: 动手学深度学习笔记3.1+3.2+3.3 文章目录 系列文章目录 前言 一.softmax回归 1.1 分类问题 1.2 网络架构 1.3 全连接层的参数开销 ...

  8. 影像组学视频学习笔记(43)-标准差、标准误及95%置信区间CI、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/f09d0f97592f 来源:简书,已获授权转载 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(43)主要 ...

  9. 影像组学视频学习笔记(42)-影像组学特征提取问题解决过程复现、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/c3e6de2f79b3 来源:简书,已获转载授权 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(42)主要 ...

  10. 影像组学视频学习笔记(41)-如何使用软件提取组学特征、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/72186eb3e395 来源:简书,已获授权转载 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(41)主要 ...

最新文章

  1. jenkins+jmeter+ant+jmeter在Jenkins上报告
  2. 2010年11月23日学习内容总结
  3. [TCP/IP] TCP如何保证可靠性
  4. 计算机word简历制作教程,用word制作个人简历的方法
  5. Towards Real-Time Multi-Object Tracking(JDE)
  6. 亚马逊云服务器账号注册,免费申请12个月aws亚马逊云详细教程
  7. 湘潭大学计算机学院考研喜报,喜报:数学与信息学院考研学子喜讯频传(2019年)...
  8. vue项目目录详细解读
  9. 5种小型设备上深度学习推理的高效算法
  10. 《战神3》GDC技术制作团队研讨报导
  11. windows命令行中 启动应用程序
  12. cloudera/quickstart
  13. DEVexpress GridControl 属性设置
  14. 50个Java多线程面试题
  15. mmWave Radar AWR1843硬件组成认识
  16. python中break怎么用_详解Python中break语句的用法
  17. word文档生成方案
  18. 岩土工程、颗粒流计算软件PFC6.0疫情传播案例——生化危机、病毒传播感染、古尔丹大战霜狼氏族
  19. arm的linux怎么管理任务,【linux】arm mm内存管理
  20. python免费训练营教程_鹅厂大牛亲授Python零基础寒假训练营视频教程

热门文章

  1. quick time不可用是什么意思_农村谚语“不可不算,不可全算”是什么意思?
  2. c语言表达式4 6的值是,C语言中,为什么指针表达式的值+1.对应的地址值却+4?/为什么两个数组元素的地址相减之差不为地址之差?...
  3. python装饰器详解 带参数-python中的装饰器详解
  4. c语言中void 与0,C语言中的 (void*)0 与 (void)0
  5. map slice综合示例 go语言
  6. maven库的查询和配置
  7. oracle11g怎样进行闪回,模拟Oracle11g下用Flashback Data Archive进行恢复的若干场景
  8. linux嵌入式第一阶段,零基础学嵌入式编程系列第一阶段Linux操作系统基础知识.ppt...
  9. python3捕获异常_Python 异常处理和捕获信息教程|python3教程|python入门|python教程
  10. python上机实验报告读取文件_Python程序设计实验报告八:文件