【发布时间】:2010-05-15 12:10:06
【问题描述】:
经常访问,但第一次在 StackOverflow 上发帖,我希望你们能帮助我解决这个问题。我对 Obj-C 和 XCode 还很陌生,我面临着这个非常……奇怪的……问题。谷歌搜索没有出现任何东西。基本上,我在一条不执行任何取消引用或我可以看到的任何类似操作的线路上得到一个 EXC_BAD_ACCESS 信号。想知道你们是否知道在哪里寻找这个。我找到了解决方法,但不知道 为什么 这行得通...损坏的版本 barfs 所在的行是:
LevelEntity *le = entity;
我的访问信号不好。
这里是:
此版本有效
NSArray *contacts = [self.body getContacts];
for (PhysicsContact *contact in contacts)
{
PhysicsBody *otherBody;
if (contact.bodyA == self.body)
{
otherBody = contact.bodyB;
}
if (contact.bodyB == self.body)
{
otherBody = contact.bodyA;
}
id entity = [otherBody userData];
if (entity != nil)
{
LevelEntity *le = entity;
CGPoint point = [contact contactPointOnBody:otherBody];
}
}
此版本无效
NSArray *contacts = [self.body getContacts];
for (NSUInteger i = 0; i < [contacts count]; i++)
{
PhysicsContact *contact = [contacts objectAtIndex:i];
PhysicsBody *otherBody;
if (contact.bodyA == self.body)
{
otherBody = contact.bodyB;
}
if (contact.bodyB == self.body)
{
otherBody = contact.bodyA;
}
id entity = [otherBody userData];
if (entity != nil)
{
LevelEntity *le = entity;
CGPoint point = [contact contactPointOnBody:otherBody];
}
}
这里,两个示例之间的唯一区别在于我枚举数组的方式。在第一个版本(有效)中,我使用 for (... in ...),而在第二个版本中,我使用 for (...; ...; ...)。据我所知,这些应该是一样的。
这真的让我很奇怪。任何人都有类似的经验或想法这里发生了什么?真的很棒:)
干杯, 亚历克斯
【问题讨论】:
-
只是好奇——在这一行:CGPoint point = [contact contactPointOnBody:otherBody];您是在使用从代码示例中删除的点做某事,还是该调用实际上在联系或 otherBody 中设置了一些状态?
-
我现在正在用它做一些事情——我在写示例的时候还没有,因为我发现在写引用的行和实际做一些有价值的事情之间发生了崩溃:)
标签: objective-c xcode memory-management