【问题标题】:How to watch a NSMutableArray's count change using LLDB如何使用 LLDB 观察 NSMutableArray 的计数变化
【发布时间】:2015-04-10 09:43:58
【问题描述】:

要查看数组,我这样做:

NSMutableArray *myArray = [@[] mutableCopy];
// set a lldb watchpoint here: (lldb) w s v myArray

然而,这种观察点仅在内存地址更改时才有效,例如:

myArray = [NSMutableArray array];

我想看的是myArray的内容变化例如:

[myArray addObject: @1] //I want get notify when this thing happen

有没有人面临同样的问题,你是如何实现这种事情的。

【问题讨论】:

  • 也许从 NSArray 派生一个类并覆盖方法 addObject: 你调用 [super addObject:...]; 并在那里放置断点。
  • @riodoro1 这行得通。但每次我看的时候,我都会先改变我的数组类。
  • 只有作为接口的声明不会改变。如果您想观看所有这些,只需#define NSArray WatchableNSArray
  • 我明白了。我的意思是如果我想看array1我必须先将array1的课程切换到WatchableNSArray,如果有一些lldb功能最初支持它,这很麻烦。
  • @liaa,请看下面的链接。用于观察可变数组计数的代码的完整解决方案就在那里。

标签: ios objective-c lldb


【解决方案1】:

您需要通过代理对象使用 KVO 机制来处理可变集合。 您可以在 Apple 的 KVC/KVO 文档中找到所有详细信息。

这种观察的例子和细节描述here

关键是通过以下方式为NSArray做一个代理对象

- (NSMutableArray *)mutableArrayValueForKey:(NSString *)key

然后使用这个可变对象来改变原始数组。

【讨论】:

  • 这种方法可用于观察 KVO 兼容属性的变化——而不是任何可变数组。数组本身在任何方面都不符合 KVO。
  • @NikolaiRuhe,这种方法用于任何可变集合。您不应该关心数组的内容。当您使用代理对象将初始工作包装到围绕它的一些额外工作时,这是一种混乱。请参阅 Apple 关于 KVC/KVO 中的多对多关系的文档。我的方法是 100% 解决上述问题,我认为您在我们讨论方向上的答案标记不符合条件。
  • @NikolaiRuhe 当然,它们符合 KVO 标准。
  • @AminNegm-Awad 请提供链接。我的印象是 Cocoa 集合类不公开任何符合 KVO 的属性。
  • @malex 我要澄清的是,KVO 并没有为这个问题提供解决方案。您的答案没有给出一个(它使多对关系变得可观察,而不是 NSMutableArray 内容)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 2019-11-07
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多