viewDidLoad vs appDelegate methods



我坚持有点困惑,什么时候把一些东西在一个viewController,什么时候把它放在一个AppDelegate,如果它是ok的从AppDelegate引用viewController方法(我知道你可以但这并不意味着它是鼓励)。

真的,我不会感到困惑,如果不是所有这些多任务的东西似乎使我的概念复杂化。首先,如果有人知道一个好的、全面的、易于阅读的关于如何处理多任务的概述,我很想知道。

事情是这样的:我需要我的应用程序在加载时做一些事情,无论是从后台加载还是从新鲜加载。比如执行网络可达性测试,根据从互联网接收的数据设置接口,以及这个或那个。

我的一个主要问题与视图控制器的视图如何与背景状态交互有关。如果应用程序从后台恢复并且视图立即出现而没有加载,那么我假设它仍然在内存中,并且我已经验证了viewDidLoad没有使用基本的NSLog调用。所以,它是安全的说,任何和所有对象保留我的视图控制器(如数据模型和所有子视图)因此仍然在内存中?如果不是,发现哪些对象需要重新加载,哪些对象仍然存在,等等的最佳实践是什么?

我认为即使在多任务环境中,也可以假设标准内存管理规则适用。这意味着你的控制器,以及你在控制器中引用的任何东西都应该仍然有效,直到:

  1. 你显式地释放你的控制器/对象
  2. 你的应用程序终止

似乎你的假设是系统会在你背后搞乱你的对象,这(我希望)不会发生。这些方法都在app委托中以防你想在这些特定事件发生时显式地做任何事情。

关于viewDidLoad问题,您可以实现viewDidUnload或检查isViewLoaded方法,以确保您的视图不会由于低内存条件或其他原因而卸载。在UIViewController文档中有更多的内容

解决这个问题的一种方法是使用惰性加载属性。在你的。h文件中:

@interface YourViewController : NSObject
@property (nonatomic, retain) NSArray *exampleObject;
@end

在你的。m文件中:

@implementation YourViewController
@synthesize exampleObject = _exampleObject;
- (NSArray *)exampleObject {
    // reload only if necessary
    if (!_exampleObject) {
        _exampleObject = [[NSArray alloc] init];
        // do whatever other setup you need to
    }
    return _exampleObject;
}
@end

最新更新