《从零开始学Swift》学习笔记(Day 62)——Core Foundation框架之内存托管对象与非托管对象...
原创文章,欢迎转载。转载请注明:关东升的博客
内存托管对象
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框架之内存托管对象与非托管对象...相关推荐
- 从零开始学STM32(学习笔记——第三天)
CSDN话题挑战赛第2期 参赛话题:学习笔记 参考文章: [教学文章]STM32内部重要功能全记录 [教学文章]STM32内部核心功能大揭秘 [教学文章]STM32内部重要功能全记录 框架:STM32 ...
- IOS学习笔记6—Objective C—Foundation框架
2019独角兽企业重金招聘Python工程师标准>>> 原文:http://blog.csdn.net/tangren03/article/details/7747281 转载于:h ...
- 【从零开始学深度学习编译器】十二,MLIR Toy Tutorials学习笔记一
本笔记由学习MLIR Tutorials总结而成,欢迎批评指正. Chapter1: Toy语言和AST MLIR提供了一种Toy语言来说明MLIR的定义和执行的流程.Toy语言是一种基于张量的语言, ...
- 关东升的《从零开始学Swift》即将出版
大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版<从零开始学Swift><从零开始学Swift>将在< ...
- 关东升的《从零开始学Swift》
这个博文是swift 2.0的,也是可以参考的 http://blog.csdn.net/tonny_guan/article/category/6139217 文章目录 [置顶] 关东升的<从 ...
- 【从零开始学深度学习编译器】十三,如何在MLIR里面写Pass?
[GiantPandaCV导语]这篇文章是学习了比较久然后按照自己的理解步骤重新总结了下来,主要是MLIR Toy Tutorials第3,4篇文章的内容.这里主要讲解了如何在MLIR中自定义Pass ...
- 动手学深度学习笔记3.4+3.5+3.6+3.7
系列文章目录 动手学深度学习笔记系列: 动手学深度学习笔记3.1+3.2+3.3 文章目录 系列文章目录 前言 一.softmax回归 1.1 分类问题 1.2 网络架构 1.3 全连接层的参数开销 ...
- 影像组学视频学习笔记(43)-标准差、标准误及95%置信区间CI、Li‘s have a solution and plan.
作者:北欧森林 链接:https://www.jianshu.com/p/f09d0f97592f 来源:简书,已获授权转载 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(43)主要 ...
- 影像组学视频学习笔记(42)-影像组学特征提取问题解决过程复现、Li‘s have a solution and plan.
作者:北欧森林 链接:https://www.jianshu.com/p/c3e6de2f79b3 来源:简书,已获转载授权 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(42)主要 ...
- 影像组学视频学习笔记(41)-如何使用软件提取组学特征、Li‘s have a solution and plan.
作者:北欧森林 链接:https://www.jianshu.com/p/72186eb3e395 来源:简书,已获授权转载 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(41)主要 ...
最新文章
- jenkins+jmeter+ant+jmeter在Jenkins上报告
- 2010年11月23日学习内容总结
- [TCP/IP] TCP如何保证可靠性
- 计算机word简历制作教程,用word制作个人简历的方法
- Towards Real-Time Multi-Object Tracking(JDE)
- 亚马逊云服务器账号注册,免费申请12个月aws亚马逊云详细教程
- 湘潭大学计算机学院考研喜报,喜报:数学与信息学院考研学子喜讯频传(2019年)...
- vue项目目录详细解读
- 5种小型设备上深度学习推理的高效算法
- 《战神3》GDC技术制作团队研讨报导
- windows命令行中 启动应用程序
- cloudera/quickstart
- DEVexpress GridControl 属性设置
- 50个Java多线程面试题
- mmWave Radar AWR1843硬件组成认识
- python中break怎么用_详解Python中break语句的用法
- word文档生成方案
- 岩土工程、颗粒流计算软件PFC6.0疫情传播案例——生化危机、病毒传播感染、古尔丹大战霜狼氏族
- arm的linux怎么管理任务,【linux】arm mm内存管理
- python免费训练营教程_鹅厂大牛亲授Python零基础寒假训练营视频教程
热门文章
- quick time不可用是什么意思_农村谚语“不可不算,不可全算”是什么意思?
- c语言表达式4 6的值是,C语言中,为什么指针表达式的值+1.对应的地址值却+4?/为什么两个数组元素的地址相减之差不为地址之差?...
- python装饰器详解 带参数-python中的装饰器详解
- c语言中void 与0,C语言中的 (void*)0 与 (void)0
- map slice综合示例 go语言
- maven库的查询和配置
- oracle11g怎样进行闪回,模拟Oracle11g下用Flashback Data Archive进行恢复的若干场景
- linux嵌入式第一阶段,零基础学嵌入式编程系列第一阶段Linux操作系统基础知识.ppt...
- python3捕获异常_Python 异常处理和捕获信息教程|python3教程|python入门|python教程
- python上机实验报告读取文件_Python程序设计实验报告八:文件