原创文章,欢迎转载。转载请注明:关东升的博客
内存托管对象
Swift中调用Core Foundation函数获得对象时候,对象分为:内存托管对象和内存非托管对象。
内存托管对象就是由编译器帮助管理内存,我们不需要调用CFRetain函数获得对象所有权,也不需要调用CFRelease函数放弃对象所有权。
获得这些内存托管对象的方法,是采用了CF_RETURNS_RETAINED或CF_RETURNS_NOT_RETAINED注释声明,示例代码:
-(CGPathRef)makeToPath CF_RETURNS_RETAINED { UIBezierPath* triangle = [UIBezierPath bezierPath]; [triangle moveToPoint:CGPointZero]; [triangle addLineToPoint: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); }
内存托管对象使用起来比较简单,不需要我们做额外的事情。
func CFStringCreateWithCString(_ 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()
相关推荐
从零开始学swift,图灵原创,关东升著。基于swift2.x。2016年3月版
"Swift编程入门与精通.pdf" 通常是市面上的第三方教材,旨在帮助读者从零开始直至熟练掌握Swift。这本书可能包含了基础到进阶的所有内容,包括如何构建实际应用、使用Swift进行iOS开发的流程、Swift UI设计、Xcode...
### Foundation框架的学习介绍 #### Foundation框架概述 Foundation框架是苹果公司为Cocoa和Cocoa Touch提供的核心库之一,它提供了一系列基本数据类型和容器类,以及底层服务的封装,如内存管理、文件处理、网络...
总之,《OpenStack从零开始学》这本书将带领你走过OpenStack的入门之路,从基础概念到实战技巧,全面覆盖OpenStack的学习要点。通过阅读这本书,你将具备使用OpenStack构建和管理云基础设施的能力,并为进一步深入...
Swift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习...
以下是从零开始学习SwiftUI的一些建议: 了解Swift语言基础:SwiftUI是用Swift语言编写的,因此了解Swift语言的基础知识是非常重要的。你可以从苹果官方文档、在线教程或书籍中学习Swift语言。 学习SwiftUI基本概念...
在Swift开发中,结合Apple的CoreML框架与TinyYOLOv1模型,可以实现高效的对象检测功能。这个项目,"swift-iOS-CoreML-Yolo",是专为iOS设备设计的,利用强大的机器学习能力来识别和定位图像中的特定对象。下面我们将...
标题中的"Foundation Framework Reference"是指苹果iOS和macOS开发中的Foundation框架的官方参考文档,它是Apple的开发平台上的基础框架之一,提供了许多核心的面向对象编程功能和服务。"iphone Foundation框架参考...
在实践项目中,你将学习如何使用UIKit或SwiftUI框架构建用户界面,掌握数据持久化技术如Core Data或SQLite,以及如何利用网络请求库如Alamofire来实现网络通信。随着技能的提升,你还可以探索Swift的开源生态系统,...
在Swift开发中,我们可以利用UIKit或者Core Graphics框架来实现这一功能。 首先,我们需要了解贝塞尔曲线的基本概念。贝塞尔曲线由控制点和起点、终点共同决定,分为线性、二次、三次及更高次的类型。在这个案例中...
Swift是Apple公司为iOS、macOS、watchOS和tvOS平台设计的一种强大的、现代的编程语言。本资源“Swift学习demo.zip”包含...记得如果在学习过程中遇到任何问题,可以通过邮件寻求帮助,确保你的Swift学习之旅顺利进行。
本教程旨在帮助初学者从零开始学习Swift编程,并通过实战微博App的项目开发,掌握iOS应用的基本构建过程。 一、Swift语言基础 Swift是Apple为iOS、iPadOS、macOS、watchOS和tvOS开发的开源编程语言。它的设计目标是...
Swift中的Core Data是苹果提供的一款强大的数据管理框架,主要用于iOS、macOS等Apple平台的应用程序。它是Apple的Objective-C和Swift应用程序中模型层的主要部分,用于处理持久化数据。在这个"swift-core data开发...
Swift编程入门教程,从零开始,深入浅出的Swift语言学习指南; Swift编程入门教程,从零开始,深入浅出的Swift语言学习指南; Swift编程入门教程,从零开始,深入浅出的Swift语言学习指南; Swift编程入门教程,从零...
"ios-Swift基础框架.zip"这个压缩包很可能包含了一些基本的Swift框架教程或者代码示例,帮助初学者理解Swift编程的核心概念以及如何在实际项目中应用这些概念。 Swift的基础框架主要包括以下几个方面: 1. **Swift...
Swift-ObjectMapper是一个强大的工具,专门设计用于Swift编程语言,旨在简化JSON数据与自定义模型对象之间的转换过程。这个框架由Tristan Himmelman创建,它通过提供一个简洁的接口,使得开发者能够快速地实现序列化...
Swift编程语言以其强大的功能和易读性在iOS应用开发领域占据了一席之地,而CocoaTouch框架则是构建iOS应用程序的核心工具。本视频教程将引导您深入理解CocoaTouch,并逐步掌握开发iOS应用的关键技巧。 首先,Cocoa...
Swift 与 Cocoa 框架的研发是iOS和macOS应用开发的核心,这涉及到Apple的强大的开发工具链,包括Xcode IDE、Swift编程语言以及Objective-C的Cocoa框架。本资源"Swift Development with Cocoa 1st Ed"是一个开源项目...
对于更复杂的字符串操作,如正则表达式匹配,可以利用`Foundation`框架中的`NSRegularExpression`类。 在CSV文件解析方面,Swift标准库并没有提供内置的解决方案,但我们可以利用`Scanner`类来手动实现,或者引入第...