Выпуск подвидов - PullRequest
       20

Выпуск подвидов

0 голосов
/ 17 марта 2009

У меня есть UIScrollView, который имеет несколько страниц информации, которые добавляются как подпредставления в scrollView. Каждый контроллер subView хранится в NSMutableArray в scrollViewController.

У меня есть некоторые утечки памяти в подпредставлениях, и я пытаюсь их исправить, следя за тем, чтобы вызывался метод dealloc каждого контроллера подпредставления. Я делаю это, выпуская контроллеры представления из метода dealloc контроллера scrollView.

Когда я пытаюсь освободить массив после освобождения контроллеров subViews, приложение вылетает.

Код следует ... что я делаю не так?

- (void)dealloc {

// Loop through the array of subView controllers and release them
for ( int i = 0; i < [viewControllers count]; i ++ ) {
    [[viewControllers objectAtIndex:i] release];
}

[viewControllers release];  // Crashes here unless I remove the loop above
[scrollView release];
[pageControl release];
[theKnot release];
[super dealloc];

}

Ответы [ 2 ]

4 голосов
/ 17 марта 2009

NSMutableArray вступает во владение объектами, которые он содержит - он увеличивает их число ссылок при добавлении и освобождает свои объекты, когда освобождает себя.

При условии, что вы освободили или автоматически выпустили каждый контроллер представления после помещения его в массив viewControllers, нет необходимости перебирать объекты в viewControllers и освобождать их - массив сделает это за вас.

Вы отказываете при освобождении массива, потому что массив пытается освободить объекты, которые вы уже освободили и теперь недействительны.

1 голос
/ 17 марта 2009

NSArray высвобождает свое содержимое, когда освобождается, поэтому объекты высвобождаются как в вашем цикле, который, по-видимому, освобождает их, так и после массива.

Вам следует прочитать руководство по управлению памятью Apple , если вы планируете создавать приложения для iPhone. Это не так сложно, но это то, чему вы должны научиться. В противном случае вы получите утечки и сбои и понятия не имеете, почему. Как только вы поймете несколько простых правил Cocoa, все станет ясно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...