Iphone NSMutableArray访问问题

Iphone NSMutableArray访问问题,iphone,objective-c,ios,xcode,memory-management,Iphone,Objective C,Ios,Xcode,Memory Management,我(想我)知道你在想什么。。。不是另一个EXC\u BAD\u ACCESS问题,但我真的很挣扎,这让我发疯。我在网上和这里到处搜索,我面临的问题似乎与我的内存管理有关 问题: 基本上,我有一个NSMutableArray来跟踪一些网络食品。因为食物可以同时添加和带走,所以我有一个单独的数组来检查要移除的项目,并保存那些不需要移除的项目。然后清除原始数组(\u food)并复制回临时数组中保存的所有项目(foodToKeep)。这是密码 NSMutableArray *foodToKeep =

我(想我)知道你在想什么。。。不是另一个
EXC\u BAD\u ACCESS
问题,但我真的很挣扎,这让我发疯。我在网上和这里到处搜索,我面临的问题似乎与我的内存管理有关

问题:

基本上,我有一个
NSMutableArray
来跟踪一些网络食品。因为食物可以同时添加和带走,所以我有一个单独的数组来检查要移除的项目,并保存那些不需要移除的项目。然后清除原始数组(\u food)并复制回临时数组中保存的所有项目(foodToKeep)。这是密码

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

for (Food *food in _food) {
    if(!food.removeable){
        [foodToKeep addObject:food];
        [food release];
    }
}

if(foodToKeep > 0){
  [_food removeAllObjects];

  for (Food *food in foodToKeep) {
      [_food addObject:food]; // EXC_BAD_ACCESS error here
      [food release];
      }
  }
}

[foodToKeep release];
我在将食物添加到原始数组时遇到错误的访问错误。在搜索之后,听起来好像食物数组在某处被释放了,或者以某种方式以零结束。我唯一有一个关于食物的
release
的地方是
dealoc
方法,所以我不明白为什么会发生这种情况

我对Objective-C还比较陌生(所以对我放松点!),但据我所知,没有泄漏和意外释放导致这种情况,我想我需要的是专家的眼睛,看看我最有可能犯的一个小错误:-p

编辑: 食物的定义和分配如下:

    @interface MainLayer
    {
        NSMutableArray *_food;
    }
在类
init
方法中

    _food = [[NSMutableArray alloc] init];

在您将食物添加到数组后,您将释放食物,但释放并不平衡
保留
调用,因此当您到达
[\u food removeAllObjects]
时,可能所有食物对象都会在那里被释放,因此当您稍后再次尝试访问它时,它会崩溃。

您在这里过度释放:

用于(食品*食品中的食品){
如果(!食物可移动){
[foodToKeep addObject:food];

//[food release];你正在释放你不拥有的
food
对象。看看Objective-C

事实上,事实上:

for (Food *food in _food) {

您不拥有对象食物,因此您不应该在第一个循环中释放它,也不应该在第二个循环中释放它。

食物定义在哪里。.给出code@Shubhank修改了问题:)您的第二个for…in子句是不必要的;您可以改为使用
[\u food addobjects fromarray:foodToKeep];
for (Food *food in foodToKeep) {
      [_food addObject:food]; // EXC_BAD_ACCESS error here
      // [food release]; <--- REMOVE THIS
}
for (Food *food in _food) {