1

我在使用 OCMock 和 UIView 时遇到了一些麻烦。

我有这样的代码:

UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
id view1Mock = [OCMockObject partialMockForObject:view1];

[[[view1Mock expect] andForwardToRealObject] removeFromSuperview];

... something ...

[view1Mock verify];

而且我确实经常在 [[[view1Mock expect] andForwardToRealObject] removeFromSuperview] 上得到 EXC_BAD_ACCESS。但不是每次。这很烦人,因为我无法在 OCMock 上找到它,而且它并非每次都发生。

任何的想法?

编辑:

我使用启用了 ARC 的新 Apple LLVM 3.0 编译器,我认为这可能是原因。但我想修复它。有没有人试过用ARC编译OCMock?

最良好的祝愿,丹尼尔

4

2 回答 2

1

由于 'removeFromSurperview' 是一种 UI 方法,也许这应该在主线程中执行。

问候,

于 2011-12-08T11:14:47.507 回答
1

有时会收到 a的行EXC_BAD_ACCESS可能是问题原因的线索。不过还不确定。有问题的代码可能在其他地方。

当然,您上面的代码看起来不错。只要您稍后在某个时间点release上进行操作。view1

UI 操作必须在主线程上运行。但是,这不会导致 theEXC_BAD_ACCESS或任何其他显式异常。

因此,要找到问题的根本原因,第一步是运行分析器。然后,使用 Instruments 中的 Leaks 工具。

有关详细信息,以及有关导致这些错误的原因的出色链接以及如何修复它们的分步说明,请查看这些问题的答案:

寻找 EXC_BAD_ACCESS 的原因 - 在 Xcode4

随机的 EXC_BAD_ACCESS 在一个不可能发生的地方

于 2011-12-08T11:46:47.573 回答