Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 已发布阵列EXC_访问_错误和Cocos2D_Objective C_Ios_Xcode_Memory Management_Cocos2d Iphone - Fatal编程技术网

Objective c 已发布阵列EXC_访问_错误和Cocos2D

Objective c 已发布阵列EXC_访问_错误和Cocos2D,objective-c,ios,xcode,memory-management,cocos2d-iphone,Objective C,Ios,Xcode,Memory Management,Cocos2d Iphone,我最近发布了一个关于我的一些记忆问题的问题。多亏了这个很棒的社区,我现在已经把它修好了,但我面临着另一个问题。我正在使用Cocos2d开发一个游戏,我正在尝试从和数组中删除一个精灵。当我尝试释放用于跟踪要移除的精灵的临时阵列时,问题就出现了 NSMutableArray *spritesToRemove = [[NSMutableArray alloc] init]; // Loop through all sprites for(CSSprite *sprite in

我最近发布了一个关于我的一些记忆问题的问题。多亏了这个很棒的社区,我现在已经把它修好了,但我面临着另一个问题。我正在使用Cocos2d开发一个游戏,我正在尝试从和数组中删除一个精灵。当我尝试释放用于跟踪要移除的精灵的临时阵列时,问题就出现了

    NSMutableArray *spritesToRemove = [[NSMutableArray alloc] init];

    // Loop through all sprites
    for(CSSprite *sprite in _sprites){
        if(sprite.toRemove){
            [spritesToRemove addObject: sprite];
        }
    }

    // loop through sprites to be removed
    for(CSSprite *removeableSprite in spritesToRemove){

        [_sprites removeObject: removeableSprite];

        // Cocos2d code to remove a sprite
        [self removeChild: removeableSprite cleanup: YES]; 
    }

    [spritesToRemove release]; // EXC_BAD_ACCESS error 
我感觉我出错的原因是因为我在
[self-removeChild:removeableSprite cleanup:YES]中释放了精灵对象在实际释放阵列之前。如果我删除行
[spritesToRemove release]
,那么一切都可以正常工作,但很明显,我的手上有一个内存泄漏

我已经尝试过移动精灵的移除,通过完全省略行
[self-removeChild:removeableSprite cleanup:YES],我可以对内存进行排序
但是Cocos2d在
[子访问]处从CCNode内抛出相同的EXC_BAD_访问错误
-(无效)访问

再次感谢您的帮助:-)

编辑:我启用了NSZombie,收到以下消息:

***-[Sprite release]:消息发送到解除分配的实例0xfa94cf0


对我来说,这暗示了我最初的想法,数组中的某个条目即将发布。是这样吗?如果是这样的话,我还能找到哪里吗?

我设法找到了问题所在(说实话,我觉得有点傻:-p)。当我将精灵添加到阵列中时,我就手动释放了它,而这不在提供的代码中,所以你们无法找到它。精灵已经设置为自动释放,因此被清除了两次,这导致了我的错误。

就我所见,一切看起来都很好。我能看到的唯一一件事是,如果在您进入本节之前,您的一个精灵“to remove”主动使用cleanup从父级移除,那么如果子级已被移除,Coco的removeChild方法将“不做任何事情”。@YvesLeBorg他们怎么会这样做?我有另一个类,它在数组中保留了一个精灵的属性,这可能是释放它吗?不确定,我没有看到你所有的代码。在这段代码中,您的_sprites数组似乎与[self children]数组不同步。在某个地方,您可能有一个过程可以从中删除子对象,而不向_sprites数组通知好消息。@YvesLeBorg您是对的,sprite发布了两次(请参见答案)。如果不是你的帮助,我是不会找到它的。谢谢!:-)