混淆对象的类方法实例上的运行方法

时间:2013-02-21 15:09:51

标签: ios objective-c class singleton

因此,我对数据的发展位置以及存储在应用程序中的位置感到困惑。这不是一个特定的问题,所以希望有人可以提供一个普遍的答案。

我需要在几个UIViewController实例之间传递一些数据,而我现在正在使用一个名为myManager的单例对象。这个类有一个方法,一个名为+ (LCDataManager *) sharedDataManager的类方法,该方法基本上检查sharedDataManager是否已经存在,如果是,返回它,如果不存在,则创建它并设置其变量。这意味着我可以在任何我喜欢的地方引用该类,从多个类中的任何地方访问和修改其变量。

第一个问题:这是正确/最佳/最合适的传递数据的方法吗?我希望它服从MVC,感觉就像它一样,我希望我是对的。

第二个问题:如果我想在该类中放置一个实例方法,并在类方法中调用它,该怎么办?假设我的sharedDataManager需要调用一个方法来抓取一些对象的一个​​变量(一个数组),然后将它们放在另一个数组中,然后再将它发回。我不能那样做,可以吗?那是怎么回事?如果我创建该类的实例(而不是使用共享实例),我将失去在多个viewControllers中使用该实例的能力。

我很困惑,看起来这不是我正在做的问题。感谢任何指导,最好不要那些“阅读Apple文档”的东西 - 他们写的就好像你已经知道你在做什么,坦白说我还没有。

4 个答案:

答案 0 :(得分:3)

  

这是正确/最好/最合适的传递数据的方法吗?

只有一个LCDataManager实例,但使用Singleton模式has potential problems没有任何问题。另一种方法是初始化一个LCDataManger并将其传递到任何需要的位置。

  

如果我想在该类中放置一个实例方法,并在类方法中调用它,该怎么办?

访问者+ (LCDataManager *) sharedDataManager应该只返回实例。我想你想要的是像

+ (LCDataManager *)preparedDataManager {
    LCDataManager *shared = [self sharedDataManager];
    [shared doSomeInstanceMagic];
    return shared;
}

- (void)doSomeInstanceMagic {
    // magic!
    // grab some objects one of its variables (an array),
    // and put them in another array
}

答案 1 :(得分:3)

  

第一个问题:这是正确/最佳/最合适的传递数据的方法吗?我希望它服从MVC,感觉就像它一样,我希望我是对的。

您的设计完全符合MVC标准。

  

第二个问题:如果我想在该类中放置一个实例方法,并在类方法中调用它,该怎么办?

你可以肯定地定义一个实例方法并像这样调用它:

[[MyModelClass sharedModel] myInstanceMethod];

确实,[MyModelClass sharedModel]将为您提供MyModelClass实例(应该保证它是唯一的,因为它是单身人士)。

如果你想从sharedModel类方法调用实例方法,你也可以这样做,因为sharedModel拥有对你的单例的引用,所以它可以向它发送消息。

答案 2 :(得分:1)

Matthijs Hollemans在他的博客上提供了一个非常好的三部分教程,介绍了让视图控制器相互通信的正确方法:

答案 3 :(得分:0)

这个开发架构没有问题,它是iOS开发中必须使用的(我认为)。在书IOS Programming: The Big Nerd Ranch Guide中,他们称之为模型视图控制器商店

关于你的第二个问题,是的,你可以声明实例方法,然后从你的sharedDataManager打电话。什么是不常见的是创建单例类的其他实例,但它是可能的。