ios - 关于 UITabBarController,有没有办法在选择新选项卡时强制完全释放 View

标签 ios iphone objective-c memory-management uitabbarcontroller

我正在为 iPhone 创建一个选项卡栏应用程序,我希望在选择新选项卡时完全卸载/释放当前处于事件状态的任何 View 。当重新选择任何选项卡时,我希望它必须重新加载所有内容。我寻求此功能的原因是因为所有 View 都与单个数据库交互,并且可以修改数据库。构建 View 时,它们是根据当前数据库构建的,这意味着它们可能会过时而无需强制重新加载 View 。

要查看我指的是什么,请在您的 iPhone 上加载“电话”应用程序,然后您可以在键盘上输入一个数字,切换标签页,再切换回键盘,您输入的数字将保留在那里。这对于电话应用程序来说是一个理想的特性,但对于我正在设计的东西来说并不是那么多。

有办法实现吗?或者,我应该使用其他方法在切换标签时更新我的​​ View 吗?

最佳答案

我认为 Neil Galiaskarov 评论说你不应该考虑发布 View 。他将当前的重新加载逻辑放在 -(void)viewWillAppear 中的想法很合理:

-(void)viewWillAppear:(BOOL)animated{ 
   [super viewWillAppeared:animated]; 
   // Any code you are currently triggering in your init / viewDidLoad 
   // to reload your database and display the result
}

每次您通过选项卡栏返回时都会触发此操作,并且应该会为您提供所需的结果。但是,根据您下一步的操作,有一些注意事项可能无法提供所需的功能:

  • 当通过弹出堆栈到达屏幕时,屏幕将被更新(根据您的描述,这可能没问题)。
  • 如果您开始使用滑动手势在堆栈中向后导航,但中止导航,屏幕也会更新。 (因为这会触发 viewWillAppearviewDidAppear)。

如果后者是一个问题,一种方法是通过 BOOL _shouldTriggerReload; 来处理它:

viewWillAppear 逻辑包装在 if 中:

if (_shouldTriggerReload){
   _shouldTriggerReload = NO; // Preparing for the next round
   // Any code you are currently triggering in your init / viewDidLoad 
   // to reload your database and display the result
}

然后在你的 viewDidDisappear 中:

- (void)viewDidDisappear:(BOOL)animated{
   [super viewDidDisappear:animated];
   _shouldTriggerReload = YES;
}

而且还必须在您的 viewDidLoad 中为第一个条目设置它:

- (void)viewDidLoad{
    _shouldTriggerReload = YES;
}

关于ios - 关于 UITabBarController,有没有办法在选择新选项卡时强制完全释放 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21642757/

相关文章:

ios - 从自定义按钮执行 Segue

iphone - 如何才能显示细条纹背景?

ios - 在 mapView regionDidChangeAnimated 中获取 exec bad access 错误

ios - iPhone 的电话号码格式

允许用户在屏幕上绘图并保存为图像的 iOS SDK 库?

iphone - Xcode - 手动加载 View Controller

iphone - 显示 UIAlertView 会导致 EXC_BAD_ACCESS

ios - 跟踪 GPUImageMovie 的进度

ios - NSString 中的字符数

ios - 使用分段控件切换*和刷新* subview