Вы отпускаете объекты, когда не должны быть.
В fetchImmediateChildrenValues вы выпускаете val
, но это не тот же val
, который вы выделили, это val
, возвращаемый внутри цикла for. Удалите alloc и отпустите для val
.
///NSString *val = ...
for(NSString *str in keys) {
NSString* val = (NSString *)[[tmp objectForKey:str] objectForKey:@"innertext"];
[pushArr addObject:val];
}
///[val release];
Вы делаете ту же ошибку с ключами. Вы инициализируете ключи для чего-то, что у вас есть (вы выделяете это), затем вы заменяете это (что приводит к утечке памяти) чем-то, что вам не принадлежит (это авто-релиз), затем вы отпускаете ключи, которые освобождают автоматически выпущенный объект. Таким образом, вы перепустите его.
Прочитайте правила управления памятью еще раз. См. здесь и здесь .