【问题标题】:Leaks in UIPasteboard objectsUIPasteboard 对象中的泄漏
【发布时间】:2011-11-27 22:52:58
【问题描述】:

我在几个 UIPasteboard 对象中看到了很多泄漏。直到今天,我从未听说过这门课,而且(显然)我自己也没有在程序中使用过。截图如下:

我能做些什么来消除这些泄漏?我是否正确地看待这个问题?

【问题讨论】:

  • 我自己不知道该怎么做,但我相信有这样的指南可以帮助解决这个问题。这是你要找的吗? raywenderlich.com/2696/…
  • 您可以做的第一件事是粘贴您使用的有关粘贴板的代码,以便我们查看它是如何泄漏的。
  • @Zigglzworth:正如我在问题中提到的,我没有在代码中使用粘贴板,所以我真的不知道在这里粘贴什么。
  • 代码中的某些内容必须使用 UIPastBoards。您是否使用任何类型的第 3 方代码?
  • @Zigglzworth:你说的太对了!我正在使用 openUDID 包并且它泄漏了。 github.com/ylechelle/OpenUDID/blob/master/OpenUDID.m 这就是代码所在的位置。你想让我接受你的其他答案吗?

标签: iphone ios ipad instruments memory-leaks


【解决方案1】:

确保检查问题是否是使用的任何第 3 方代码中的 UIPasteBoard 实例。

【讨论】:

  • 我在 OpenUDID 库中的 UIPasteboard 类中有一串泄露的对象。希望这会得到解决!
【解决方案2】:

没有堆栈跟踪,您将无法做很多事情。

UIPasteboard 用于实现复制粘贴。在桌面上,它也用于拖放。除了这两个任务,我不太确定人们还常用它做什么,但它是一种在应用程序之间发送 sn-ps 数据的方法(假设两个应用程序都知道查看粘贴板)。

【讨论】:

  • 我的代码没有执行任何复制/粘贴操作。还有什么想法吗?
  • @Ravi:找出您在 Instruments 中没有获得堆栈跟踪的原因。您可能需要打开 malloc 堆栈日志记录。
  • 我已更新图像以反映堆栈跟踪。有什么想法吗?我现在很确定它来自 OpenUDID。这是代码:github.com/ylechelle/OpenUDID/blob/master/OpenUDID.m
  • 当然 :) 但请注意关于它确实是第 3 方代码的答案的评论
【解决方案3】:

如果这不是您设置的应用程序粘贴板,而不是系统粘贴板,那么您将需要访问 generalPasteBoard,而不是获取其所有项目和这些项目的所有类型,并将其字符串和数据值设置为 nil。

generalpasteboard UIPasteBoard *pb = [UIPasteboard pasteBoardWithName:UIPasteboardNameGeneral];
for (UIPasteBoardItem *pbItem in [pb items]) {

      for (NSString pbType in [pbItem pasteboardTypes]) {
       [pbItem setData:nil forPasteboardType:pbType];
       [pbItem setValue:nil forPasteboardType:pbType];
      }
}

试着把它放在你的应用程序的开头......仍然奇怪的是普通粘贴板正在泄漏......顺便说一下,它也可能是查找粘贴板 UIPasteboardNameFind(也是系统粘贴板)

请注意,这是为了确定它是否是最终分布式应用程序中未使用的通用粘贴板。还要确保检查问题是否是使用的任何第 3 方代码中的 UIPastBoard 实例。

【讨论】:

  • 哇,这听起来像一个可怕的想法。在没有的地方添加 UIPasteboard 访问,并完全清除用户的剪贴板,绝对没有预期的收益。拉维,请不要这样做。
  • @Kevin :不适合在实际应用中使用。用于查明是否是普通粘贴板造成的泄漏。
猜你喜欢
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2012-01-17
  • 1970-01-01
相关资源
最近更新 更多