2016-01-08 112 views
1

我是Swift的新手,想知道是否有人能帮助确认我对Apple Swift中释放对象的理解?在Swift中发布对象

CGPathCreateWithRect()文档描述here状态返回值是

“一个新的,一成不变的路径。你是负责释放此 对象。”

什么时候说“你是负责任的”就像说你不再持有引用时那么简单,垃圾收集器会删除这个对象?即你负责管理参考资料?在这种情况下 - 并不明显?如果没有 - 这是什么意思?

感谢

拜伦

+0

斯威夫特没有垃圾收集器。阅读以了解其工作原理:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097-CH20-ID48 –

回答

4

使用Objective-C

只有当从Swift documentation

内存管理对象

核心基础,从注释的API返回的对象你是负责自动在 内存管理Swift - 你不需要调用CFRetain, CFRelease或CFAutorelease函数爱上你自己。

+0

谢谢Vadian。经过一堆阅读和一些测试,这似乎是这种情况。 – Bryon

1

没有垃圾收集iOS中。请参阅memory management上的苹果文档和ARC的概念,以更好地理解该评论和此处的范式转变。

另外,在Swift中你不需要使用它。您可以创建一个实际对象,并将包含的CGPathRef传递给可能需要它的任何低级函数。

0

您应该确实查看WWDC 2011的ARC视频。它们可在开发者网站上找到并通过iTunes打开。尤其是:

•会话323 - 引入自动引用计数

•会话322 - Objective-C的进步在深度

此外,ARC参考笔记:
http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html

参考笔记和视频都讨论了Core Graphics(等)以及他们如何与ARC一起工作。

具体来说,看所谓的“管理免费电话桥接”

在很多Cocoa应用程序的部分,你需要使用Core Foundation的风格 的对象,无论是从核心基础框架本身(如 CFArrayRef或CFMutableDictionaryRef)或采用 核心基金会约定(如Core Graphics(您可能使用 类型,如CGColorSpaceRef和CGGradientRef))的框架。

编译器不会自动管理Core的基线对象的生命周期;您必须调用CFRetain和CFRelease(或 对应的特定于类型的变体),这由Core基金会内存管理规则(请参阅内存管理编程指南 指南)规定。

如果Objective-C和核心基础风格的对象之间投射,您 需要告知使用一个投对象 的所有权语义的编译器(在objc/runtime.h所定义)或核心 基础风格的宏(在NSObject.h中定义):[...]