【问题标题】:Memory leak declaring constants声明常量的内存泄漏
【发布时间】:2015-07-14 09:10:16
【问题描述】:

前几天在使用 Instruments 时,我在一个非常简单的示例代码中运行内存泄漏,如下所示:

@IBAction func shareSheet(sender: AnyObject) {

    let firstActivityItem = "Hello there is a memory leak here..."

    let secondActivityItem : NSURL = NSURL(string: "http://www.sample.com/")!

    let activityViewController : UIActivityViewController = UIActivityViewController(
        activityItems: [firstActivityItem, secondActivityItem], applicationActivities: nil)

    activityViewController.popoverPresentationController?.sourceView = (sender as! UIButton)

    self.presentViewController(activityViewController, animated: true, completion: nil)
} 

上述代码的目标是显示UIActivityViewController在社交网络等中发帖。

Instruments泄露截图:


在我终于解决的问题中工作,将两个常量firstActivityItemsecondActivityItem的声明更改为变量,内存泄漏就消失了。

但我的问题是为什么会这样?

为什么使用let 而不是var 声明会产生内存泄漏?

【问题讨论】:

  • @nhgrif 但是为什么 Instrument 将其检测为泄漏呢?那我该如何管理呢?
  • 字符串在编译时创建并放入数据段中,永远不需要为常量引用制作副本。
  • FileUrlwithpath 它不适用于网络链接。它仅适用于本地资源文件。对于链接,您必须使用 NSURL(string:)
  • @LeonardoSavioDabus 是的,你是对的,我的错误,更新的问题

标签: ios swift memory-leaks instruments


【解决方案1】:

最好的选择,这是一个可以在更新中解决的 Swift 问题。

字符串在编译时创建并放入数据段中,永远不需要为常量引用制作副本。

请提交错误报告:http://bugreport.apple.com

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 2014-05-25
    • 1970-01-01
    相关资源
    最近更新 更多