gpt4 book ai didi

iphone - NSMutableArray 访问问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:59:57 24 4
gpt4 key购买 nike

我(想我)知道你在想什么......不是另一个 EXC_BAD_ACCESS 问题,但我真的很挣扎,这让我发疯。我已经在整个网络 上到处搜索,我面临的问题似乎与我的内存管理有关。

问题:

基本上我有一个 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 数组正在某处发布或以某种方式结束为 nil。 _food 的唯一一个 release 是在 dealloc 方法中,所以我不明白为什么会这样。

我是 Objective-C 的新手(所以对我放轻松!)但据我所知,没有泄漏,也没有导致此问题的意外发布,我认为我需要的是专家的眼光看看我最有可能犯的一个小错误:-P

编辑:食物在这里定义和分配:

    @interface MainLayer
{
NSMutableArray *_food;
}

类中的init方法

    _food = [[NSMutableArray alloc] init];

最佳答案

你在这里过度释放:

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

这里

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

删除多余的版本,您应该没问题。

关于iphone - NSMutableArray 访问问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9352226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com