1

我有一个应用程序在正常使用中运行似乎没有问题。Clang 静态分析器也没有报告任何问题。当我尝试在 Instruments 中运行它时,它会因无法识别的选择器异常而失败。

违规行是表单的简单属性设置器:

self.bar = baz;

为了弄清楚发生了什么,我在其上方添加了一个 NSLog() 调用:

NSLog(@"class = %@ responds = %d", [self class], [self respondsToSelector:@selector(setBar:)]);
self.bar = baz;

在模拟器(没有仪器)和设备上,这正是我所期望的:

类 = Foo 响应 = 1

在 Instruments 下运行时,我得到:

类 = Foo 响应 = 0

我对可能导致这种情况的原因感到困惑。当它在 Instruments 环境中时,可能会占用一个不同的内存位置?谁能建议我如何调试它?

4

3 回答 3

0

If bar belongs to self, can't you do bar=baz; ?

于 2009-08-13T17:32:45.400 回答
0

这里没有足够的信息来了解发生了什么,但是,如果您知道要提供哪些信息,您可能已经修复了它。所以。需要检查的几件事:

  • “自我”指针是否以任何方式混合?为了理智起见,尝试打印出self各个点的值
  • 当您的代码在 Instruments 中运行时,它是否以不同的模式运行?(32 位与 64 位,垃圾收集与保留释放等)我不确定为什么其中任何一个会产生影响,但如果它以不同的模式运行,那就值得研究了。
  • 您是否正确合成了设置器?或者它是动态提供的(通过核心数据等)?如果你手动指定一个setBar:方法,你还会得到错误吗?
于 2009-09-26T16:32:28.860 回答
0

检查您的属性。也许对你来说需要一个 baz 的演员表?

于 2009-09-26T16:07:06.057 回答