High Sierra 中的 NSCollectionView 内存泄漏?

2024-02-19

我通过 Instruments 注意到 NSCollectionView 中存在内存泄漏。当我追踪代码时,它显示了下面的特定行:

collectionView.makeItem(withIdentifier: identifier, for: indexPath) as? DisplayableCellProtocol

然后我在Xcode、内存调试器中查看,发现有一些未引用的项目导致了泄漏。然而,并非所有创建的项目makeItem漏水,有的正常,有的甚至不显示。

Managed normal unleaked item is like this graph correct

And the leaked ones are like this (without any connections): wrong

这正常吗,其他人也有同样的问题吗?有谁知道如何正确解决这个问题?这与使用 xib 设计项目视图有什么关系吗?

以下是一些可能有助于理解情况的代码:

func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
  let data = datasource[indexPath.item]
  let identifier: String = "ServiceCell"
  // Next line is where the leak occurs
  guard let cell = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: identifier), for: indexPath) as? ServiceCell else {
      return ServiceCell(nibName: NSNib.Name("ServiceCell.xib"), bundle: Bundle.main)
  }
  cell.iconView.image = data.icon
  cell.serviceLabel.stringValue = data.name
  cell.introLabel.stringValue = data.content
  cell.highlighted = false
  return cell
}

ServiceCell的定义是:

class ServiceCell: NSCollectionViewItem {
  @IBOutlet weak var iconView: NSImageView!
  @IBOutlet weak var serviceLabel: NSTextField!
  @IBOutlet weak var cmdLabel: NSTextField!
  @IBOutlet weak var introLabel: NSTextField!

  override func viewDidLoad() {
    super.viewDidLoad()
    // Do view setup here.
  }
}

不确定代码在这里是否有帮助。我试图找出我自己的代码中是否有任何错误,但还没有发现。

Meanwhile, I found a lot of other leaks, and most of them points to the makeItem line enter image description here

更新:我又看了一遍。所以每次都会使实际需要的物品数量增加一倍。例如,我需要 2 个单元,它将创建 4 个而不是 2 个,其中两个是泄漏的。有任何想法吗?


这件事终于解决了。创建继承自的类时NSCollectionViewItem创建 xib 文件时,该类文件所有者xib中默认设置为之前创建的子类。当我们在 xib 中添加自定义对象时,需要将其设置为空。

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

High Sierra 中的 NSCollectionView 内存泄漏? 的相关文章

随机推荐

  • 如何检测设备上是否存在Android Market?

    有些Android设备没有Android Market 例如韩国等 是否可以在运行时检测Android Market的存在 我知道我可以先尝试打开一个市场 uri 看看是否有抛出任何异常 但我认为这不是一个明智的做法 我知道我可以尝试打开一
  • Unicode 代码页 1200 到底是什么?

    在研究一些本地化选项时 我偶然发现它是 Visual Studio 中的保存选项 Unicode 代码页 1200 到底是什么 微软文档页面代码页标识符 https learn microsoft com en us windows win
  • 使用 printf 格式在 C 中打印等宽列

    我想在 C 中使用 printf 打印列 我编写了以下代码 include
  • didReceiveRemoteNotification:fetchCompletionHandler:从图标打开与推送通知

    我正在尝试实现后台推送通知处理 但在确定用户是否从发送的推送通知打开应用程序而不是从图标打开应用程序时遇到问题 void application UIApplication application didReceiveRemoteNotif
  • 在 JavaScript 上添加/删除监听器(垃圾收集器)

    我有一个关于添加 删除 DOM 对象的侦听器的快速问题 我想问垃圾收集器是否能够在从页面中删除元素时收集内存 示例 一个 ul 带有几个孩子列表的标签 li var ul document getElementById someParent
  • 带有模板参数的模板中的默认值 (C++)

    假设我有一个模板 称为 ExampleTemplate 它接受两个参数 容器类型 例如列表 向量 和包含类型 例如 float bool 等 由于容器实际上是模板 因此该模板有一个模板参数 这就是我必须写的 include
  • python 异常。UnicodeDecodeError: 'ascii' 编解码器无法解码字节 0xa7

    我正在将 scrapy 与 python 结合使用 并且在 python item pipline 中有此代码 def process item self item spider import pdb pdb set trace ID st
  • Django 表单 - 验证错误后重新加载时变量类型发生变化

    我花了一些时间 但无法找出以下行为的确切原因 我有一个 Django 表单 在模板中我试图查看列表中是否存在整数 然后用它做一些事情 if pk in form area value form area value is a list li
  • 有没有办法设置X轴的背景颜色

    我检查了文档 我能找到的只是设置笔划 但我需要整个 x 轴背景不仅仅是字体颜色 Renaldo Balaj 好吧 你可以像这里一样向你的图表添加一个 svg 元素 https codesandbox io s highlight zomm
  • 如何比较两个日期[重复]

    这个问题在这里已经有答案了 我有一个带有 PHP 前端的 MySQL 数据库 在我的记录中 我有一个直接从数据库访问的发布日期和到期日期 我需要做的是检查并查看是否有任何记录的过期日期与发布日期相符 就像是 你可以这样做 posted da
  • LiveData 观察者未调用

    我有一个活动 TabBarActivity承载一个片段 EquipmentRecyclerViewFragment 片段收到 LiveData 回调 但 Activity 没有 在调试模式下使用断点进行证明 奇怪的是 如果我调用 ViewM
  • dyld:惰性符号绑定失败:找不到符号:_PQsetErrorContextVisibility

    跑步时 psql 我收到这个错误 dyld lazy symbol binding failed Symbol not found PQsetErrorContextVisibility Referenced from usr local
  • 未定义引用错误,无法创建共享库

    尝试了很多方法来解决问题但没有运气 这是我的 Android mk LOCAL PATH call my dir include CLEAR VARS LOCAL MODULE avcodec LOCAL SRC FILES libavco
  • 什么是最好的:每条记录 1 个表,还是 1 个表中所有记录都与外键链接?

    我有一个应用程序 可以让用户创建不同的表单 调查 然后填写它们 所以它是纸张的替代品 这是我在应用程序中使用的当前模型 Table 1 SURVEYS TABLE ID name description Table 2 name of th
  • 会话与会话工厂之间的区别 - Hibernate?

    除了以下几点之外 我们还有其他差异吗 另请验证以下是否正确 SessionFactory每个应用程序都有一个对象 并且Session每个客户只有一个对象 SessionFactory是创建和管理Sessions Session就是提供一个C
  • Android TableLayout 不垂直滚动

    预先感谢您的任何帮助 我对 Android 很陌生 这是我的问题 我正在使用 TableLayout 来显示可编辑字段 大约有二十行要显示 在较小的设备上 行会溢出屏幕 我需要视图允许用户上下滚动 我缺少什么 尝试将 TableLayout
  • 在windows上打开指定目录下的Cygwin命令

    我使用 phpstorm 和它的终端设施 在终端部分我输入F Projects cygwin64 bin mintty exe i Cygwin Terminal ico 所以它使用 Cygwin 作为终端 但它会在主文件夹中打开它 是否可
  • XML 不可能是整个程序

    当我包含以下 js 文件 其中包含 jquery 时 我在 Firebug 中收到错误 XML 不能是整个程序 JS文件包含参考 JS文件内容 id txtAddress1S blur function id txtAddress1S va
  • WPF 中延迟后重置变量值

    我有一些执行并获取执行返回值的代码 我将此值设置为窗口的依赖属性 因为有样式触发器绑定到它 当变量为 0 时 使用默认样式 1 时使用偏红色样式 2 时使用绿色样式 但一段时间后我必须以某种实际的方式重置这种风格 做到这一点最简单的方法是什
  • High Sierra 中的 NSCollectionView 内存泄漏?

    我通过 Instruments 注意到 NSCollectionView 中存在内存泄漏 当我追踪代码时 它显示了下面的特定行 collectionView makeItem withIdentifier identifier for in