【发布时间】: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泄露截图:
在我终于解决的问题中工作,将两个常量firstActivityItem和secondActivityItem的声明更改为变量,内存泄漏就消失了。
但我的问题是为什么会这样?
为什么使用let 而不是var 声明会产生内存泄漏?
【问题讨论】:
-
@nhgrif 但是为什么 Instrument 将其检测为泄漏呢?那我该如何管理呢?
-
字符串在编译时创建并放入数据段中,永远不需要为常量引用制作副本。
-
FileUrlwithpath 它不适用于网络链接。它仅适用于本地资源文件。对于链接,您必须使用 NSURL(string:)
-
@LeonardoSavioDabus 是的,你是对的,我的错误,更新的问题
标签: ios swift memory-leaks instruments