我的应用程序有一个扩展的视图控制器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
在你的初始化中,你调用[super initWithCoder:coder]
。最好重写指定的初始值设定项UITableViewController
,即-initWithStyle:
。可能发生的情况是,当您通过调用创建表视图控制器时[super init…]
,它是用它创建的tableView
属性已被设置;也就是说,它在初始化时创建表视图。这就是为什么你打电话给self.tableView.frame
有效 - 如果值self.tableView
is nil
。这是一个更好的实现:
- (id)initWithCoder:(NSCoder*)coder {
if (self = [super initWithStyle:UITableViewStyleGrouped]) {
}
return self;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)