我(想我)知道你在想什么...不是另一个EXC_BAD_ACCESS
的问题,但我真的很挣扎,这让我疯狂。我已经在这里搜索了全网和的高和低,我面临的问题似乎与我的内存管理有关。NSMutableArray访问问题
问题:
基本上我有一个NSMutableArray
持续跟踪一些网络食物。由于食物可以在同一时间添加和拿走,我有一个单独的阵列,检查项目删除和持有那些不需要需要被取出。想法是清除原始数组(_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];
当食物添加到原始数组时,我得到了错误的访问错误。在搜索后,听起来像_food
阵列正在某处发布或以某种方式结束为无。对于_food我唯一有一个release
的地方是dealloc
方法,所以我不明白为什么会发生这种情况。我很相当新的Objective-C(所以对我来说很容易!)但是据我所知,没有泄漏,也没有意外发布导致这种情况,我认为我需要的是专家的眼睛看到什么是最有可能我的一个微不足道的错误:-P
编辑: 食品的定义,在这里分配:
@interface MainLayer
{
NSMutableArray *_food;
}
在类init
方法
_food = [[NSMutableArray alloc] init];
哪里是_food定义..给代码 – Shubhank 2012-02-19 19:06:28
@Shubhank修改了这个问题:) – Peter 2012-02-19 19:13:24
你的第二个for ... in子句是不必要的;你可以使用'[_food addObjectsFromArray:foodToKeep];' – bneely 2012-02-19 19:15:18