我的应用程序有一个扩展UITableViewController
的视图控制器。初始化方法如下所示:
- (id)initWithCoder:(NSCoder*)coder {
if (self = [super initWithCoder:coder]) {
self.tableView = [[UITableView alloc] initWithFrame:self.tableView.frame
style:UITableViewStyleGrouped];
}
return self;
}
最初加载视图时,它显示为UITableViewStyleGrouped
。但是,如果我的应用收到内存不足警告,则上述视图会更改为UITableViewStylePlain
。视图/控制器没有关联的xib文件。 viewDidUnload和didReceiveMemoryWarning方法很简单:
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
我的问题是,当我收到内存警告时,为什么表格样式会改变?
它发生在设备和模拟器上。该设备是运行OS 3.1.3的3G iphone,模拟器运行OS 3.1
答案 0 :(得分:4)
在初始化过程中,您拨打[super initWithCoder:coder]
。覆盖UITableViewController
的指定初始值设定项可能会更好,这是-initWithStyle:
。可能发生的情况是,当您通过调用[super init…]
创建表视图控制器时,它的创建时已经设置了tableView
属性;也就是说,它在初始化时创建表视图。这就是为什么您对self.tableView.frame
的调用有效 - 如果self.tableView
的值为nil
则不应该有效。这是一个更好的实现:
- (id)initWithCoder:(NSCoder*)coder {
if (self = [super initWithStyle:UITableViewStyleGrouped]) {
}
return self;
}