如果我做错了,或者我应该为此提交错误报告,请发送电子邮件。
我将UI元素发送到我的主viewcontroller,如下所示:
knob[7] =[[UIImageView alloc] initWithFrame:CGRectMake(a, b, c, d)];
knobS[7] =[[knobBand alloc] initWithFrame:CGRectMake(a, b, c, d)];
knob[8] =[[UIImageView alloc] initWithFrame:CGRectMake(a, b, c, d)];
然后我做
[self.view addSubview:knobS[7]];
[knob[7] setImage:[UIImage imageNamed:@"knob"]];
[knob[8] setImage:[UIImage imageNamed:@"knob"]];
[self.view addSubview:knob[7]];
[self.view addSubview:knob[8]];
如果我将[self.view addSubview:knobS[7]];
置于其他4行以下,则knob[7]
和knob[8]
根本不会显示,但它们的大小相同且只有knob[7]
由knobS[7]
涵盖。我认为这是一些编程错误,所以我没有进一步研究这个问题,因为将所述行放在4行之上 - 直到我第三次构建项目,这就是它变得奇怪的地方:
现在,每当我构建,构建和清理,清理和构建......项目时,就会发生以下三件事之一:
knobS[7]
setImage:
行抛出EXC_BAD_ACCESS 并且订单的出现次数非常准确地总结; 1.发生率为60%,2。30%,情况3发生在10例中的1例。
我尝试重新启动并且没有一行代码抓取当前时间或可能影响代码结果的随机值。即使在10秒内两次点击CMD + R而没有改变任何代码,我得到2个不同的结果。
是否还有其他形式的清洁/建设项目可能对此有所帮助?
编辑:在Xcode 7中,这种行为在某种程度上是不可再现的,只有6种情况会导致问题。答案 0 :(得分:0)
如果我把[self.view addSubview:knobS [7]];在其他4行以下,旋钮[7]和旋钮[8]根本不会显示
您正在创建三个大小相同的控件。最后添加的任何一个都将位于顶部。您可能会或可能不会看到其他人,这取决于顶部的人如何自我绘制,背景是否不透明等等。
现在,每当我构建,构建和清理,清理和构建......项目时,就会发生以下三件事之一:
听起来你有一个糟糕的指针,也许还有其他一些错误。如果使用无效指针,则应用程序可能会抛出异常,也可能不会抛出异常,具体取决于指针是否恰好指向有效对象。这些问题对他们有非常不确定的感觉,因为他们对微小的变化非常敏感:在内存中,对象首先被分配,当它被解除分配时,是否有任何其他东西被分配使用相同的记忆等。
我尝试重新启动,并且没有一行代码抓取当前时间或可能影响代码结果的随机值。
没关系 - 你真的不能指望系统在你的应用程序和下一个应用程序之间的完全处于相同的状态。
是否还有其他形式的清洁/建设项目可能对此有所帮助?
您如何构建项目没有任何问题,也可能不需要清理。为了帮助找到问题,enable NSZombies将指向解除分配的对象,而不是指向一个小对象,当您尝试使用指针时会触发异常。这应该使问题更加明显,更具可重复性。