Iphone 从ViewController访问模型?

Iphone 从ViewController访问模型?,iphone,ios,model-view-controller,uiviewcontroller,model,Iphone,Ios,Model View Controller,Uiviewcontroller,Model,我正在创建一个iPhone应用程序,一个游戏,我试图理解并接受MVC架构。我计划创建一个模型,在本例中称为HighScoresModel,负责保存游戏中有关高分的所有信息 应该在哪里创建此模型?在AppDelegate中?在第一视图控制器中 其他视图控制器应如何访问该模型,以便传递类似于addScore:withindustry:的消息 我认为最好的选择是在HighScoresModel上有一个class方法,它可以从任何需要它的对象访问模型的单个共享实例 这优于其他选项,因为没有控制器负责实例

我正在创建一个iPhone应用程序,一个游戏,我试图理解并接受MVC架构。我计划创建一个模型,在本例中称为
HighScoresModel
,负责保存游戏中有关高分的所有信息

  • 应该在哪里创建此模型?在AppDelegate中?在第一视图控制器中
  • 其他视图控制器应如何访问该模型,以便传递类似于
    addScore:withindustry:
    的消息

  • 我认为最好的选择是在
    HighScoresModel
    上有一个class方法,它可以从任何需要它的对象访问模型的单个共享实例

    这优于其他选项,因为没有控制器负责实例化模型,并且控制器也没有不必要地耦合到应用程序委托

    例如:

    @interface HighScoresModel : NSObject
    
    + (HighScoresModel *)sharedHighScoresModel;
    ...
    
    @end
    
    @implementation HighScoresModel
    
    static HighScoresModel *SharedHighScoresModel;
    
    + (HighScoresModel *)sharedHighScoresModel
    {
        if (!SharedHighScoresModel)
        {
            SharedHighScoresModel = [[HighScoresModel alloc] init];
        }
    
        return SharedHighScoresModel;
    }
    
    ...
    
    @end
    

    希望这有帮助

    创建一个Singleton并在其中创建HighScoresModel。可以从所有ViewController访问单例

    至于其他视图控制器传递消息,您将能够在控制器内的任何位置执行类似的操作

    [MySingleTon myHighScoresModel]添加分数:MyCore with Destionness:MyDestionness]


    请参阅以下链接以了解更多有关单例的参考资料

    Ok,那么基本上是单例吗?这是否被普遍接受为做这些事情的适当方式?我问这个问题是因为在过去,我使用了单例,有人告诉我,它们是一种相当黑客的方式。将其放在应用程序委托中也是一种单例,但只会将所有代码专门耦合到应用程序的委托中,并降低可重用性和可测试性。我很乐意听到其他的选择,或者说这是不可接受的黑客行为,特别是当你的高分模型必须被控制器层中的多个类访问时。但是,如果只有一个视图控制器需要它,并且可以在视图控制器的生命周期内完成持久化,那么让控制器实例化并保留它可能是合适的。如果此模型需要从文件加载数据,那么应该在何处发生这种情况。我应该把它放在AppDelegate的didFinishLaunching方法中吗?这可能是您的
    HighScoresModel
    的责任,可能会放在它的init方法或任何强制它重新加载数据的方法中。