在这种情况下我应该避免使用单身人士吗?

时间:2014-01-08 08:30:53

标签: ios iphone objective-c

我一直在考虑在我当前的应用中使用单例数据库。我也一直在考虑不使用这种模式的原因,目前我被困在中间。

在这种情况下,我对单身人士的原因是由于我可以轻松访问方法和属性,我需要在整个应用程序中多次使用。我可以使用appDelegate,但这会使关注的区域变得混乱,因为这些方法/变量与应用程序状态无关 - 更多的是与用户输入有关。数据将最终与NSUserDefaults一起保留 - 这已经是单身人士了。

我反对它的原因是因为它的另一个单例到一个已经低音的应用程序(appDelegate)

我的问题:

使用另一个Singleton来访问数据模型是正确/可接受的方式 - 或者我应该看看另一种方法?

我个人认为将单例作为数据模型没有任何问题 - 使用app委托在应用程序启动时实例化它,然后在整个应用程序中需要时访问其各种方法/属性。这将是应用程序中唯一的其他单例(也许是用户管理的另一个单例 - 例如;登录/退出/配置文件/凭证等?)

有什么想法吗?

全部谢谢!

2 个答案:

答案 0 :(得分:4)

在ios中有多个单例类没有问题,事实上在我的许多项目中,大多数类都是单例。通常,我在单例中具有数据访问逻辑和控制,然后将实际对象类作为实例。

正如您已经确定的那样,您真的不想在AppDelegate中添加不适用于整个应用程序的内容。

从我的观点来看,不要从AppDelegate实现类,只需让类在第一次访问时实例化。

每当我向人们解释单身人士Objective-C时,我总是将他们引导到这个网站,对你来说可能值得一看:

http://www.galloway.me.uk/tutorials/singleton-classes/

它以一种非常容易理解的方式解释了您的需求。能够实现“自我实现”的这一点。是这一点:

+ (id)sharedManager {
    static MyManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
    });
    return sharedMyManager;
}

答案 1 :(得分:1)

在这种情况下你可以使用单身人士。不要使用委托来保存应用程序的值。您也可以使用相同的单例进行用户管理。

注意:除非您需要,否则不要使用全局变量。单身人士和顶级数据只有在他们所包含的数据真正属于顶级时才应使用。