didReceiveMemoryWarning Crash

-Использование ARC

-У меня есть 5 отдельных контроллеров представления, все подклассы класса, который я сделал, назвал "UIViewControllerWithLoadingView", который подклассы UIViewController.

-В обоих подклассах и суперклассе я выделяю и освобождаю свойства следующим образом:

@property (strong, nonatomic) NSURLConnection *urlConnection;

- (void)viewDidUnload
{
    [super viewDidUnload];
    self.urlConnection=nil;
}

-Теперь когда вызывается didReceiveMemoryWarning, метод viewDidUnload подклассов работает нормально. BBBUUTTT, если я установлю свойства равными nil в суперклассе UIViewControllerWithLoadingView, приложение будет аварийно завершено. Особенно там, где я установил свойства подкласса на ноль. Так что на данный момент я просто не устанавливаю свойства равными nil в суперклассе, что становится проблематичным, потому что живые байты просто накапливаются во время выполнения.

2 ответа

Решение

Проблема была в суперклассе, у которого было представление, которое расширило uiview, у которого была ссылка свойства на viewcontroller. Ну, dealloc автоматически вызывается по дуге, поэтому dealloc фактически устанавливает сам viewcontroller в ноль, вызывая сбой. После того как я удалил свойство viewcontroller из пользовательского класса представления, проблема больше не возникала

Практическое правило заключается в том, что методы, которые "очищаются", такие как dealloc или viewDidUnload, должны делать вызов super после того, как они делают все остальное. (И методы, которые "устанавливают" - например, init - сначала вызывают super.) Я не могу сказать, является ли это вашей проблемой, не видя всех ваших реализаций подкласса, но это было бы место для начала.

Другие вопросы по тегам