我试图找出在以下实现中执行内存管理的最佳方法:
我有一个UIPopoverController,它将在视图的viewDidLoad上创建,并且只在viewDidUnload时消失。
在UIPopoverController中,我正在显示一个UITableView。
这是我目前在.h中的实现:
UIPopoverController *aPopoverController;
@property (nonatomic, retain) UIPopoverController *aPopoverController;
在.m:
@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中发布这些对象?
答案 0 :(得分:1)
在此代码之后,您可以随意发布aTableView
和aTableViewController
。
更具体地说,UITableViewController
会保留表格视图,因此您无需再保留该视图,UIPopoverController
会保留内容视图控制器,因此您可以释放aTableViewController
一旦你将它传递给弹出控制器。
在-viewDidUnload
中,您的popover控制器被释放,它释放表视图控制器,然后释放表视图。就这么简单。
我这样说:
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];