在Swift中释放对象

4

我是新手Swift程序员,想知道有没有人能帮助我确认在苹果的Swift中如何释放对象。

CGPathCreateWithRect()的文档描述如下面所示,返回值为:

"一个新的、不可变的路径。你需要释放这个对象。"

当它说“你需要释放”时,只需简单地认为当你不再持有引用时,垃圾回收器将删除对象即可吗?也就是说,你需要负责管理引用?如果是这样 - 那不是很明显吗?如果不是 - 这句话什么意思?

谢谢

Bryon


Swift 中没有“垃圾回收器”。阅读此内容以更好地了解其工作原理:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097-CH20-ID48 - Alexey Pichukov
3个回答

8

只有在使用Objective-C时,您才需要负责

来自Swift文档

内存管理对象

从带注释的API返回的Core Foundation对象将在Swift中自动进行内存管理--您不需要自己调用CFRetain、CFRelease或CFAutorelease函数。


谢谢Vadian。经过一番阅读和测试,这似乎是正确的结论。 - Bryon

2
iOS中没有垃圾回收机制。请参考苹果文档中关于内存管理ARC概念的说明,以更好地理解此评论和这里的范式转变。
另外,在Swift中,您不应该需要使用这个方法。您可以创建一个实际的对象,并将包含的CGPathRef传递给可能需要它的任何低级函数。

1
你应该真正关注2011年WWDC的ARC视频。它们可以在开发者网站上通过iTunes免费观看。特别是:
• Session 323 - 介绍自动引用计数
• Session 322 - Objective-C深度增强
此外,还有ARC参考说明:
http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html
参考说明和视频都讨论了Core Graphics(等等)及其如何与ARC一起使用。
具体来说,请查看名为“管理Toll-Free Bridging”的部分。
在许多Cocoa应用程序中,您需要使用Core Foundation风格的对象,无论是来自Core Foundation框架本身(例如CFArrayRef或CFMutableDictionaryRef),还是来自采用Core Foundation约定的框架,如Core Graphics(您可能会使用像CGColorSpaceRef和CGGradientRef这样的类型)。
编译器不会自动管理Core Foundation对象的生命周期;您必须按照Core Foundation内存管理规则调用CFRetain和CFRelease(或相应的特定类型变体)。
如果在Objective-C和Core Foundation风格的对象之间进行转换,则需要使用强制转换(在objc/runtime.h中定义)或Core Foundation风格的宏(在NSObject.h中定义)告诉编译器对象的所有权语义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接