我对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?
祝福, 丹尼尔
答案 0 :(得分:1)
由于'removeFromSurperview'是一种UI方法,也许这应该在主线程中执行。
此致
答案 1 :(得分:1)
您有时收到EXC_BAD_ACCESS
的行可能是问题原因的线索。但不确定。违规代码可能在其他地方。
当然,上面的代码看起来很好。只要您稍后在某release
view1
进行EXC_BAD_ACCESS
。
必须在主线程上运行UI操作。但是,这不会导致{{1}}或任何其他明确的异常。
因此,要找到问题的根本原因,第一步是运行Analyzer。然后,使用Instruments中的Leaks工具。
有关详细信息,以及导致这些错误的原因的详细链接以及如何解决这些错误的分步说明,请查看这些问题的答案: