首次展示我的视图控制器时,我希望它可能更新为该视图提供数据的缓存。但是,当用户从较深的视图控制器点击后退按钮以返回到此视图控制器时,我不想再次更新缓存。
我应该使用哪个活动?
init
中,我还没有我需要的所有参数。viewWillAppear
。viewDidLoad
都会被触发,我相信如果有内存警告,可能会再次发生这种情况。 (或者这是错的吗?)由于这是不内存驻留缓存,因此处理此问题似乎是错误的。为了澄清,这不是内存驻留缓存。这是将XML文件解析为二进制文件。二进制文件在viewDidLoad
和viewDidUnload
中加载和卸载。这是该步骤的先决条件,确保二进制文件在加载之前是最新的。
答案 0 :(得分:1)
使用init
可能有效,但我建议使用UINavigationController
的简单子类。创建一个名为setRootTableViewController:(UITableViewController *)controller
的新方法,或类似的方法。在方法实现中,请调用:
[controller.tableView reloadData];
[self pushViewController:controller animated:NO];
reloadData
将调用所有委托和数据源方法,并使用它们来更新表。如果您希望在表视图控制器上调用特殊方法,则可以将方法声明更改为setRootTableViewController:(CustomTableViewController *)controller
(或调用任何自定义表控制器),并将reloadData
行替换为调用那种方法。
然后,在您的app委托中,不是创建UINavigationController
并添加自定义视图控制器,而是创建其中一个,并调用此方法添加第一个视图。
但是,如果您使用nib设置rootViewController
,则可以覆盖initWithRootViewController:(UIViewController *)controller
,因为我想这是nib将调用以设置堆栈中的第一个视图:< / p>
- (id)initWithRootViewController:(UIViewController *)rootViewController {
if ((self = [super init])) {
[(CustomController *)rootViewController doSomethingSpecial];
[self pushViewController:rootViewController];
}
}
希望这有帮助!
答案 1 :(得分:0)
在viewDidLoad中加载缓存并在viewDidUnload和dealloc中释放它。
在内存不足的情况下调用viewDidUnload。 如果你希望你的应用程序保持响应,你就可以释放尽可能多的内存。
在这里解释得很好:When should I release objects in -(void)viewDidUnload rather than in -dealloc?