Я создаю/нажимаю свой ViewController, отображаю информацию и перехожу обратно в свой RootViewController. В то время как я перемещаюсь назад, аварийные ситуации приложения (EXC_BAD_ACCESS).SBJsonParser: приложение вылетает, если я не сохраняю возвращаемое значение
С помощью инструментов я узнал, что вызывается dealloc моего ViewController, который освобождает мой класс оболочки. В моем классе-оболочке также вызывается метод dealloc. Этот dealloc выпускает parsedJson
(сохраненное свойство), и сразу приложение падает. Странно, что количество удержаний падает от 1 до -1, несмотря на наличие только malloc и выпуск.
Если я сохраню возвращенный результат parsedJson
, приложение не падает, и я не нахожу утечки.
SBJsonParser *JSONParser = [SBJsonParser new];
id parsedJson = [[JSONParser objectWithString:jsonString error:NULL] retain];
Я не могу сделать освобождение/автоописание, потому что приложение снова потерпит крах.
С NSZombieEnabled я
* - [CFDictionary релиз]: сообщение, отправленное высвобождены например 0x6d51aa0
Я получаю это зомби после того, как я сделал изменения. Прежде чем я использовал свойство и построитель интерфейса для моего контроллера представления, и у меня не было сбоя, потому что контроллер представления не был немедленно выпущен. Теперь я делаю это:
MyViewController *myViewController = [[MyViewController alloc] init];
[[self navigationController] pushViewController:myViewController animated:YES];
[myViewController release];
myViewController = nil;
Где ошибка? Я не могу сохранить parsedJSON
без релиза. Я никогда не выпускаю parsedJson
, за исключением dealloc. Использовала ли в нем библиотеку ошибку?
Я установил свойство как ivar = object. Не понял этого факта, что я должен использовать метод setter (self.ivar или [self setIvar: myVariable]). Спасибо миллион за это! – testing