iOS通用对象

iOS通用对象,ios,appdelegate,global-object,Ios,Appdelegate,Global Object,我正在编写一个iOS应用程序,其中有一个通用对象,应用程序中的所有视图都需要访问该对象 我一直在(第一个视图控制器的)viewDidLoad事件中创建并初始化该对象,然后将对该对象的引用传递给所有其他需要它的视图。这似乎不是正确的方法,感觉我在某种程度上打破了MVC模式,因为我依赖于这个特定的视图总是第一个加载,以便设置整个应用程序需要的对象 我现在修改了我的应用程序,在appDelegate“didFinishLaunching…”中创建和初始化基本对象。这项工作正在进行,我可以从所有其他视图

我正在编写一个iOS应用程序,其中有一个通用对象,应用程序中的所有视图都需要访问该对象

我一直在(第一个视图控制器的)viewDidLoad事件中创建并初始化该对象,然后将对该对象的引用传递给所有其他需要它的视图。这似乎不是正确的方法,感觉我在某种程度上打破了MVC模式,因为我依赖于这个特定的视图总是第一个加载,以便设置整个应用程序需要的对象

我现在修改了我的应用程序,在appDelegate“didFinishLaunching…”中创建和初始化基本对象。这项工作正在进行,我可以从所有其他视图访问此公共对象,而无需将引用从一个视图传递到另一个视图

在我走得太远之前,我希望得到人们的意见,这是正确的做事方式,还是我应该做其他事情?对不起,如果这看起来像一个琐碎的问题,我只是在学习,想学习如何正确地做事


提前感谢:-)

将全局对象初始化放在didFinishLaunching中比放在didLoad中更好

有些人会不同意我的观点,说你不应该有全球句号,但我个人认为有某种全球状态是可以接受的。我喜欢一个好的面向对象的应用程序,但是在坚实的OOP和一些全局应用程序所提供的灵活性之间需要取得平衡

我认为最终做对你有利的事情,拥有一个全局状态的主要缺点是它变得难以维护,并且有可能引入很多错误/意外行为,尤其是在大型应用程序中,然而,如果你坚持MVC模式,那么你的应用程序中的每个视图都只是做它想做的事情,而不会不必要地影响应用程序的其他部分

现在,我倾向于坚持MVC/OOP原则,但我有一个[AppDelegate]sharedAppDelegate]单例,可以用来在某些点访问变量。我这里有非常非常少的变量,但它们确实派上了用场,也就是说,现在我的应用程序有一个由这个类管理的共享“加载HUD”,我的sharedAppDelegate还包含许多用于启动HTTP、解析JSON等的静态方法,这节省了很多时间

在appDelegate中使用全局信息的一种替代方法是使用NSUserDefaults存储键值信息


希望这能有所帮助,就像我说的,有些人会不同意我的观点,但归根结底,这取决于个人偏好,而MVC模式的刚性与灵活性之间的平衡是

如果不重复已经得到的答案,我建议你制作自己的Singleton对象来容纳你的“globals”,这样就不会让AppDelegate变得杂乱无章

@interface MyGlobalDataController : NSObject

@property (nonatomic, strong) MyData *myData;

+(MyGlobalDataController *)sharedInstance;

@end

@implementation MyGlobalDataController

static MyGlobalDataController *MyGlobalDataControllerSharedInstance = nil;

- (id)init {
    self = [super init];
    if (self) {
        // do whatever needs doing 
    }
    return self;
}

+(MyGlobalDataController *)sharedInstance {
    @synchronized(self) {
        if (MyGlobalDataControllerSharedInstance == nil) {
            MyGlobalDataControllerSharedInstance = [[MyGlobalDataController alloc] init];
        }
    }
    return MyGlobalDataControllerSharedInstance;
}

@end

第一次访问sharedInstance时,将调用init,因此您不必担心时间问题

谢谢你的回答,这让我对我正在做的事情感觉好多了。我完全同意你的看法,有时候有一个需要其他视图访问的“公共对象”(我尽量避免使用“全局”一词)是很方便的。我觉得这种方式更符合MVC模式的精神,因为对象与应用程序的工作更松散地耦合。通过这种方式,理论上我应该能够更改firstviewcontroller,而无需将对象创建和初始化代码添加到新的firstviewcontroller中。好的,这很酷:-)启动了我的singleton并正常工作,它可以按照我的需要正常工作。再次感谢大家的帮助。