UITableViewController的内存管理,UITableView& UIPopoverController

时间:2011-10-16 07:43:55

标签: iphone ios memory-management uipopovercontroller

我试图找出在以下实现中执行内存管理的最佳方法:

我有一个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中发布这些对象?

1 个答案:

答案 0 :(得分:1)

在此代码之后,您可以随意发布aTableViewaTableViewController

更具体地说,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];