索引0超出空数组的边界

时间:2014-05-01 15:06:49

标签: objective-c sprite-kit

我遇到了上述错误但不确定为什么因为我确定它们是数组中的某些内容。我首先在.h文件中声明了NSMutableArray。在我创建场景的.m文件中,我创建了一个纹理并将其添加到数组中:

texture = [SKTexture textureWithImageNamed:@"obstacle"];
array = [NSMutableArray arrayWithObject:texture];

通过我的其余代码,我有使用此数组创建精灵节点的方法:

SKSpriteNode *obstacle = [SKSpriteNode spriteNodeWithTexture:[array objectAtIndex:0]];

哪个有效,我可以看到这些精灵节点的图像obstacle。但是在场景结束时,当我尝试[array removeAllObjects];时,我得到了上述错误。当SKSpriteNode只是从中绘制纹理时,数组中怎么没有?

1 个答案:

答案 0 :(得分:0)

我觉得你误解了对象的所有权。您正在创建SKTexture对象并将指针(或引用)传递给该对象。这就是你正在做的事情:

  1. 创建SKTexture对象,并在保留对象的array中保留对象的引用。
  2. 使用上面的纹理创建一个SKSpriteNode对象,可以保留或复制它(我不确定,如果你不知道差异,那么你需要学习基础知识记忆管理)。
  3. array中移除所有对象(实际上是您正在移除引用),然后释放它们(但不能销毁它们)。
  4. 在第3步之后,SKSpriteNode中的纹理仍然存在,但array中的纹理不再是对它的引用。因此,如果在第3步之后您尝试访问array中的任何索引,则您尝试访问超出数组范围的内容以及触发崩溃的内容。