【问题标题】:Swift: CGPathRelease and ARC斯威夫特:CGPathRelease 和 ARC
【发布时间】:2014-09-14 01:17:22
【问题描述】:

刚刚更新到 Xcode Beta 4,发现下面的代码出现以下编译器错误:

var path = CGPathCreateMutable()
...
CGPathRelease(path)

'CGPathRelease' 不可用:核心基础对象是 自动管理内存

那么我是否只是简单地删除我的发布调用并且一切都应该没问题?还是我还缺少什么?对于 ARC,我应该注意哪些特殊情况?

【问题讨论】:

    标签: ios memory-management swift automatic-ref-counting core-foundation


    【解决方案1】:

    Using Swift with Cocoa and Objective-CWorking with Cocoa Data Types 部分说(强调我的):

    从带注释的 API 返回的 Core Foundation 对象在 Swift 中自动进行内存管理——您无需自己调用 CFRetainCFReleaseCFAutorelease 函数。如果您从自己的 C 函数和 Objective-C 方法返回 Core Foundation 对象,请使用CF_RETURNS_RETAINEDCF_RETURNS_NOT_RETAINED注释它们

    当 Swift 导入未注解的 API 时,编译器不能自动对返回的 Core Foundation 对象进行内存管理。 Swift 将这些返回的 Core Foundation 对象包装在 Unmanaged<T> 结构中。

    所以是的,除非您有 Unmanaged 结构,否则这是正确的,您不必担心手动释放对象。

    【讨论】:

    • @jtbandes 如何确定一个 CF 函数是否被注释?
    • Swift 编程指南中没有提到Unmanaged
    • 我在答案中发布的报价以及我在答案中发布的链接应该包含所有必要的信息。
    • @Zaph As @jtbandes 链接,Unmanaged<T>Using Swift with Cocoa and Objective-C 编程指南中有所描述,而不是在The Swift Programming Language.
    猜你喜欢
    • 2017-07-22
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2017-11-13
    相关资源
    最近更新 更多