Я (кажется, я) знаю, о чем ты думаешь ... не другой вопрос 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 . Единственное место, где у меня есть release
для _food, это метод dealloc
, поэтому я не могу понять, почему это происходит.
Я довольно новичок в Objective-C (так что будьте осторожны со мной!), Но, насколько я могу судить, здесь нет утечек и случайных выбросов, которые вызывают это, я думаю, что мне нужен экспертный взгляд посмотрим, что, скорее всего, тривиальная ошибка с моей стороны: -P
Edit:
Пища определяется и распределяется здесь:
@interface MainLayer
{
NSMutableArray *_food;
}
В классе init
метод
_food = [[NSMutableArray alloc] init];