为什么在 swift 中创建 String 时会出现内存泄漏?

2024-04-06

泄漏是一个根漏,在此图像中,在同一行上发生了多次,但下面还有另一个称为单次,也会产生泄漏。

这是调用堆栈after调用前面提到的代码行。

这是 Instruments 定位泄漏的类:

class Item {
 var id: String!
 var name: String!

 internal init(name: String) {
    self.name = name
    self.id = name
 }

 var description: String {
    return "(\(id)) \(name)"
 }
}

在计算变量线上检测到泄漏描述含有return "(\(id)) \(name)"更改后就解决了描述 into:

var description: String {
    return "(" + id + ") " + name
}

Update:

or

var description: String {
    if let id = self.id as? String, let name = self.name as? String {
        return "(\(id)) \(name)"
    }
    return "NO AVAILABLE DESCRIPTION"
}

最后一个发出“来自‘String!’的条件转换!”到字符串总是成功”。

所以,即使这看起来也像是一个黑客行为。

为什么会导致泄漏?


我测试了你的代码并经历了几个线程,我的理解是你必须可选绑定if let子句,当使用字符串插值而不是直接使用可选变量时。对于字符串连接,如果我们直接使用可选值是没有问题的。问题在于插值。

var description: String {
    if let id = self.id, let name = self.name {
        return "(\(id)) \(name)"
    }
    return "NO AVAILABLE DESCRIPTION"
}

您可以在这里获取更多信息Swift 字符串插值中的内存泄漏 https://stackoverflow.com/questions/24897936/memory-leaks-when-using-optionals-in-string-interpolation。 看起来像是一个错误,可能在未来的版本中会得到解决。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 swift 中创建 String 时会出现内存泄漏? 的相关文章

  • 如何从 Firebase 同步检索数据?

    我有两个集合 即用户和问题 根据使用 userId 登录的用户 我检索currQuestion价值来自users收藏 基于currQuestion值 我需要检索question来自 Firebase 的文档Questions收藏 我使用下面
  • let/var 如何解决可变性? [复制]

    这个问题在这里已经有答案了 我没有任何问题 我只是想对有关可变性的问题进行一些澄清 在 Objective C 中我们会使用例如NSMutableArray得到一个可变数组和NSArray得到一个不可变的 我对两者的内部运作了解不多 但据我
  • 来自索引范围 Swift 的新数组

    我怎样才能做这样的事情 从数组中取出前 n 个元素 newNumbers numbers 0 n 目前出现以下错误 error could not find an overload for subscript that accepts th
  • 如何使用 SwiftUI 获取多个屏幕上的键盘高度并移动按钮

    以下代码获取键盘显示时的键盘高度 并将按钮移动键盘高度 在转换源 ContentView 和转换目标 SecibdContentView 处以相同的方式执行此移动 但按钮在转换目标处不移动 如何使按钮在多个屏幕上移动相同 import Sw
  • UILabel 中的文本未垂直居中

    我使用以下代码创建了一个标签 func setupValueLabel valueLabel numberOfLines 1 valueLabel font UIFont name Avenir Black size 50 valueLab
  • 内存调试:如何获取 Linux 用户空间/内核空间中的锁定页面信息

    有什么方法可以获取Linux用户空间 内核空间中的锁定页面 虚拟内存页面 信息 我想了解详细信息 例如 谁锁定了页面 有多少页被锁定 进程名称 谁锁定了页面 还让我了解内核空间和用户空间的内存调试技术 对于内存中的每个页面 都会为其分配标志
  • 如何在 Swift 中使用未知密钥解码 JSON 响应?

    我想将数据拆分为https blockchain info ticker https blockchain info ticker这样每一行都是它自己的String在一个数组中 我正在制作一个获取所选货币价格的应用程序 因此 如果有人想要澳
  • 如何在 swiftUI (macOS) 中检测按键按下和释放

    除了标题之外没什么可说的 我希望能够在按下按键和释放按键时 在 macOS 上 在 swiftUI 视图中执行操作 在 swiftUI 中是否有任何好的方法可以做到这一点 如果没有 有什么解决方法吗 不幸的是 键盘事件处理是其中一个令人痛苦
  • Xcode 错误 - 架构 x86_64 的未定义符号?

    我正在运行 Swift 4 和 Xcode 9 beta 我收到此错误 但我不知道如何解决它 我什至不知道这是什么意思 Undefined symbols for architecture x86 64 T0So22AVCapturePho
  • 调用 SwiftUI 中位置 #11、#12 处的额外参数 [重复]

    这个问题在这里已经有答案了 我在 SwiftUI 中的切换开关上不断收到 调用中位置 11 12 处有额外参数 错误 我见过其他人有 调用中的额外参数 错误 但答案似乎没有帮助 另外 我的错误是 位置 11 12 我还没有看到其他人发生这种
  • 对成员“buildBlock()”的引用不明确

    我一直在尝试使用 Swift UI 为 iOS 13 制作一个应用程序 但我不断收到这个奇怪的错误 对成员 buildBlock 的引用不明确 无论我做什么 错误都不会消失 我尝试一次对代码段进行注释 以查看哪一部分可能导致了问题 但唯一有
  • 以编程方式从底部裁剪图像

    我正在开发自定义相机应用程序 一切进展顺利 但我在从底部裁剪图像时遇到了问题 即 裁剪后的图像与原始图像具有完全相同的宽度 但高度将为原始图像的 1 3 并且必须从底部开始 斯威夫特3解决方案 func cropBottomImage im
  • Swift 中的柯里函数

    我想创建一个返回柯里函数的函数 如下所示 func addTwoNumbers a Int b Int gt Int return a b addTwoNumbers 4 b 6 Result 10 var add4 addTwoNumbe
  • 可以获取位置,但无法获取航向

    我目前只使用模拟器 但我在 iOS 模拟器上快速使用 CoreLocation 时遇到问题 我得到此代码打印的位置更新 但从未得到标题 我不想当然 我正在尝试制作一个指南针类型的应用程序 它将显示目标的方位 class CompassVie
  • iOS 电池监控 Swift

    我已将监控设置为启用 但模拟器和设备中的电池电量仍然为 1 UIDevice currentDevice batteryMonitoringEnabled true var level UIDevice currentDevice batt
  • SwiftUI:状态栏颜色

    有没有办法将 SwiftUI 视图的状态栏更改为白色 我可能错过了一些简单的东西 但我似乎找不到在 SwiftUI 中将状态栏更改为白色的方法 到目前为止我只看到 statusBar hidden Bool 状态栏文本 色调 前景色可以通过
  • Swift Codable 将空 json 解码为 nil 或空对象

    这是我的代码 class LoginUserResponse Codable var result String var data LoginUserResponseData var mess String public class Log
  • 用于字数计算的 Swift String 中的字数

    我想做一个程序来找出字符串中有多少个单词 用空格 逗号或其他字符分隔 然后把总数加起来 我正在制作一个平均计算器 所以我想要数据总数 然后将所有单词相加 update Xcode 10 2 x Swift 5 或更高版本 使用基础方法enu
  • iOS 中的构建对象文件扩展名是什么?

    当我在项目中构建java对象类时 将创建带有 class扩展名的构建文件 并且人类不可读 快速构建文件怎么样 example car java gt build gt car class 构建后会是什么 car swift gt build
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码

随机推荐

  • 计算加速度(驾驶汽车)

    我正在尝试像应用程序 Dynolicious 一样复制加速度计算 但我不确定该去哪里计算 我用吗Core Motion或者我使用其他数字进行计算 我尝试过使用Core Motion s userAcceleraion值 但它根本不像我正在寻
  • CSS 从中心过渡到右下角

    我有一个要求 其中容器在整个页面上伸展 当我单击容器时 它应该变小 这应该发生在动画中 我尝试了 css 过渡 它将拉伸的元素动画到顶部 慢慢缩小到提供的尺寸 同时向右上角移动 但我想要的是 中间缩小 然后通过动画移动到页面右下角 Fidd
  • 在 Jython 中使用多处理 2.6.2.1 包

    我是 Jython Python 世界的新手 我正在尝试在 Jython 中安装多处理包 但是我收到了来自 easy install 的以下返回消息 Setup script exited with error Compiling exte
  • 无法获取 ZeroMQ python 绑定来通过 IPC 接收消息

    我正在尝试通过 IPC 实现 PUB SUB 如果我更改下面的代码 以便订阅者绑定到 tcp 5000 并且发布者连接到 tcp localhost 5000 它可以工作 但我无法让它通过 IPC 工作 我究竟做错了什么 订阅者 py im
  • JQuery UI 加载事件?

    有没有办法不仅检测 jquery UI 是否加载 而且在加载时触发一个事件 现在 我将代码包装在 document ready 函数中 但有时 UI 代码会出错 因为 UI 库未完全加载 所有内容都按正确的顺序加载 该代码在 99 的情况下
  • 如何使用 https 运行 Vue.js 开发服务?

    我正在使用 Vue cli 使用 webpack 模板创建 vue 项目 如何在开发中使用 https 运行它 npm run dev 在最新的vuejs 截至2018年5月7日 中 需要在项目根目录下添加一个 vue config js
  • 为什么我的 Express 路由器中间件没有定义 req.route?

    我正在尝试使用路由器中间件来获取以下值请求路由 https expressjs com en api html req route 我有一些像这样的简单代码 服务器 js import api from api app use api ap
  • webView:didFailLoadWithError -1004: 在 Phonegap ios 中连接 google plus 时无法连接到服务器

    在获取配置文件数据之前接受 google plus 身份验证时 我收到 webView didFailLoadWithError 1004 无法连接到服务器 错误 这些代码之前可以正常工作 现在我面临这些错误 不知道为什么我无法连接 请帮助
  • 使用鼠标光标捕获屏幕截图

    我使用以下代码在 Windows 上获取屏幕截图 hdcMem CreateCompatibleDC hdc int cx GetDeviceCaps hdc HORZRES int cy GetDeviceCaps hdc VERTRES
  • 正确的原型继承

    所以我真的查遍了互联网 发现了许多在 javascript 中设置原型继承的不同方法 其中一些使用call 其中一些使用以下语法 var rabbit prototype new Animal 有些在更改原型后更改构造函数 有些则不更改 有
  • vim :AnsiEsc - 如何默认打开它们?

    我有带有彩色日志条目的日志文件 假设扩展名为 smt2 其中颜色由 ansi 转义码定义 我安装了vim插件基于AnsiEsc vim http www vim org scripts script php script id 302 现在
  • awk 解析文件名并将结果添加到每行末尾

    我有许多名称相似的文件 例如 DWH Export AUSTA 20120701 20120731 v1 1 csv 397 dat 2012 10 02 04 01 46 out DWH Export AUSTA 20120701 201
  • 人类友好的二进制编码

    不久前 我发现一个网站描述了一种对人类友好的二进制到文本编码 例如 在输入 用于解码 时 它接受 0 o 和 O 全部作为相同的值 因为人们往往很容易混合这些字符 不幸的是我不记得它是怎么叫的 编辑 这就是我正在寻找的 其他Base32 的
  • retq 和 ret 有什么区别?

    让我们考虑以下程序 它计算参数的无符号平方 global foo text foo mov rdi rax mul rdi ret 这是正确编译的as 但反汇编为 0000000000000000
  • 如何设置iPhone振动时长?

    我正在使用 AudioServicesPlaySystemSound 来调用振动函数 AudioServicesPlaySystemSound kSystemSoundID Vibrate 有什么办法可以设置振动的持续时间吗 我知道默认持续
  • ASP .NET 5 MVC 6 Identity 3 角色声明组 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在寻找一种解决方案 以在带有 Identity 3 的 ASP NET 5 MVC 6 中使用高级角色 组权限管理 我启动了一
  • Spring MVC 返回自定义 HTTP 状态代码(无错误)

    在 Spring MVC RequestMapping 注释中 我返回 JSP 页面名称作为结果 这将返回 HTTP 状态代码 200 OK 如何将此状态代码更改为 201 创建之类的内容 ResponseStatus 不起作用 另外 Ht
  • JPA:如何对实体中的 Set 字段进行排序?

    我正在使用 Spring 3 2 11 RELEASE Hibernate 4 3 6 Final 和 JPA 2 1 我有以下具有以下字段的实体 Entity Table name user public class User imple
  • 如何在 Spring MVC 中将正确的 JSON 传递给控制器​​?

    我不明白为什么在将 POST 请求传递给时会收到 HTTP 415http localhost 8080 company 我在 POST 请求中的 JSON id 7 name IBM 这是我在控制器中的方法 Controller Requ
  • 为什么在 swift 中创建 String 时会出现内存泄漏?

    泄漏是一个根漏 在此图像中 在同一行上发生了多次 但下面还有另一个称为单次 也会产生泄漏 这是调用堆栈after调用前面提到的代码行 这是 Instruments 定位泄漏的类 class Item var id String var na