объект таинственным образом освобождается - PullRequest
0 голосов
/ 24 января 2011

У меня проблема с объектом, который каким-то образом освобождается.Я использовал различные методы отладки, такие как включение NSZombie и т. Д. Для поиска проблемного объекта.Это простой объект NSMutable Array, который я использовал для отображения заголовка заголовка раздела в сгруппированном табличном представлении.Это объект, из которого заголовок заголовка возвращается в функции:

- (NSString *) tableView: (UITableView *) tableView titleForHeaderInSection: (NSInteger) раздел

где я возвращаю значениеиспользуя objectAtIndex на объекте, упомянутом выше.Я гарантировал, что это не выходит за пределы или что-нибудь.Это сгруппированное табличное представление появляется на левой стороне моего пользовательского контроллера splitView.Все это прекрасно работает в портретном режиме, где левая сторона входит в поповер.Без вопросов.В ландшафте, где он выглядит как таблица, этот объект загадочно освобождает себя.Разделенное представление сначала появляется без проблем.Тогда у меня есть модальное представление, прибывающее сверху этого.Именно когда я отклоняю это модальное представление сверху, объект заголовка раздела освобождает таинственно, разбивая разделенное представление под модальным, который пытается появиться на модальном отклонении.

Любые указатели или подсказки?

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 января 2011

Когда вы загружали (или перезагружали) свой массив, вы сохраняли его?

0 голосов
/ 24 января 2011

Без кода будет действительно трудно найти проблему.

Происходит ли сбой на реальном устройстве, на симуляторе или на обоих? Вы сохраняете / распределяете и освобождаете объект вручную или он входит в пул автоматического выпуска?

Как правило, проверьте методы viewDidUnload, viewWillDisappear, didReceiveMemoryWarning и убедитесь, что все, что вы выпускаете, воссоздано соответствующими методами. Если вы используете этот массив в нескольких контроллерах представления, не забудьте сохранить и освободить его в каждом контроллере представления в соответствующих точках.

Один из способов выяснить, кто освобождает массив:

Создание подкласса NSMutableArray

@interface myNSMutableArray : NSMutableArray {}
@end

@implementation myNSMutableArray
-(oneway void)release {
    NSLog(@"Being released");
    NSLog(@"retainCount: %i", [self retainCount]);
    [super release];
}
@end

Измените тип вашего тайного массива на myNSMutableArray, добавьте точку останова после 2 строк NSLog, и когда отладчик прибудет в точку останова, попросите GDB для возврата (команда bt).

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