Управление памятью UITableViewController, UITableView & UIPopoverController - PullRequest
0 голосов
/ 16 октября 2011

Я пытаюсь выяснить, как лучше всего осуществлять управление памятью в следующей реализации:

У меня есть UIPopoverController, который будет создан при viewDidLoad представления и пропадет только при viewDidUnload.

И внутри UIPopoverController я отображаю UITableView.

Вот моя текущая реализация в .h:

UIPopoverController *aPopoverController;
@property (nonatomic, retain) UIPopoverController *aPopoverController;

В .м:

@synthesize *aPopoverController;

Внутри метода в .m, который вызывается, когда viewDidLoad:

UITableViewController *aTableViewController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];

UITableView *aTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 100, 800)];
aTableViewController.tableView = aTableView;

aTableView.delegate = self;
aTableView.dataSource = self;

aPopoverController = [[UIPopoverController alloc] initWithContentViewController:aTableViewController];

Как мне освободить эти объекты, когда viewDidUnload?

1 Ответ

1 голос
/ 16 октября 2011

Не стесняйтесь выпустить и aTableView и aTableViewController сразу после этого кода.

Чтобы быть более точным, UITableViewController сохраняет представление таблицы, так что вам больше не нужно его хранить,и UIPopoverController сохраняет контроллер представления контента, поэтому вы можете освободить aTableViewController, как только вы передадите его в контроллер поповер.

В -viewDidUnload ваш контроллер поповера будет освобожден, и он выпустит контроллер табличного представления, которыйзатем освобождает представление таблицы.Все просто.

Я бы сказал так:

UITableViewController *aTableViewController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];

UITableView *aTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 100, 800)];
aTableView.delegate = self;
aTableView.dataSource = self;
aTableViewController.tableView = aTableView;
[aTableView release];

aPopoverController = [[UIPopoverController alloc] initWithContentViewController:aTableViewController];
[aTableViewController release];
...