我试图找出在以下实现上执行内存管理的最佳方法:
我有一个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?
请随意在此代码之后发布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];