ios - 内存泄漏声明常量

标签 ios swift memory-leaks instruments

前几天在使用 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:

enter image description here


enter image description here

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

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

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

最佳答案

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

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

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

关于ios - 内存泄漏声明常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30039335/

相关文章:

ios - 使用 xcodeproj 将框架添加到 "link to binary with libraries"

swift - 围绕另一个 CGPoint 旋转一个 CGPoint

c++ - 我的文本编辑器应用程序是否存在内存泄漏?为什么它消耗的内存比记事本多 3 倍

java - 为什么一个空的 Java 程序会消耗内存?

arrays - 在哪里放置对结构数组进行操作的代码?

memory-leaks - dlopen 中 valgrind 报告的内存泄漏?

javascript - iOS 浏览器 - 当使用 JavaScript 更改 css 或内容时,iFrame 跳转到顶部

iOS 应用程序拒绝(订阅)元数据被拒绝

ios - React Native TextInput 两个 textContentType、emailAddress 和 username

swift - 将 INNER JOIN 查询从 SQLite 转换为 SQLite.Swift