前几天在使用 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 screenshots of the leak:
解决我终于解决的问题,将两个常量 firstActivityItem
和 secondActivityItem
的声明更改为变量,内存泄漏消失了。
但我的问题是为什么会这样?
为什么使用 let
而不是使用 var
声明会产生内存泄漏?
最佳答案
最好的选择,这是一个 Swift 问题,可能会在更新中得到解决。
字符串在编译时创建并放在数据段中,永远不需要为常量引用制作副本。
请提交错误报告:http://bugreport.apple.com
关于ios - 内存泄漏声明常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30039335/