我(想我)知道你在想什麼...不是另一個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