我是Swift的新手,想知道是否有人能帮助确认我对Apple Swift中释放对象的理解?在Swift中发布对象
为CGPathCreateWithRect()
文档描述here状态返回值是
“一个新的,一成不变的路径。你是负责释放此 对象。”
什么时候说“你是负责任的”就像说你不再持有引用时那么简单,垃圾收集器会删除这个对象?即你负责管理参考资料?在这种情况下 - 并不明显?如果没有 - 这是什么意思?
感谢
拜伦
我是Swift的新手,想知道是否有人能帮助确认我对Apple Swift中释放对象的理解?在Swift中发布对象
为CGPathCreateWithRect()
文档描述here状态返回值是
“一个新的,一成不变的路径。你是负责释放此 对象。”
什么时候说“你是负责任的”就像说你不再持有引用时那么简单,垃圾收集器会删除这个对象?即你负责管理参考资料?在这种情况下 - 并不明显?如果没有 - 这是什么意思?
感谢
拜伦
使用Objective-C
内存管理对象
核心基础,从注释的API返回的对象你是负责自动在 内存管理Swift - 你不需要调用CFRetain, CFRelease或CFAutorelease函数爱上你自己。
谢谢Vadian。经过一堆阅读和一些测试,这似乎是这种情况。 – Bryon
没有垃圾收集iOS中。请参阅memory management上的苹果文档和ARC的概念,以更好地理解该评论和此处的范式转变。
另外,在Swift中你不需要使用它。您可以创建一个实际对象,并将包含的CGPathRef传递给可能需要它的任何低级函数。
您应该确实查看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中定义):[...]
斯威夫特没有垃圾收集器。阅读以了解其工作原理:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097-CH20-ID48 –