Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS:应用程序中的模型架构_Ios_Xcode_Model View Controller_Architecture - Fatal编程技术网

iOS:应用程序中的模型架构

iOS:应用程序中的模型架构,ios,xcode,model-view-controller,architecture,Ios,Xcode,Model View Controller,Architecture,我确实找到了一些关于这个话题的建议,但仍然有一些事情留给我 问题是关于设计一个应用程序(从开发的角度来看),特别是关于模型 例如,我正在用Facebook SDK构建一个应用程序。我想有一个模型类用于与facebookapi的通信是有意义的。我想把这个类变成一个单身(不一定是单身)是有道理的 但Facebook iOS SDK是建立在代理之上的。因此,您发送一个请求,而响应在模型中的委托方法中返回。没关系,但我还想为模型指定一个委托,以便调用视图控制器 例如,视图控制器使用Facebook si

我确实找到了一些关于这个话题的建议,但仍然有一些事情留给我

问题是关于设计一个应用程序(从开发的角度来看),特别是关于模型

例如,我正在用Facebook SDK构建一个应用程序。我想有一个模型类用于与facebookapi的通信是有意义的。我想把这个类变成一个单身(不一定是单身)是有道理的

但Facebook iOS SDK是建立在代理之上的。因此,您发送一个请求,而响应在模型中的委托方法中返回。没关系,但我还想为模型指定一个委托,以便调用视图控制器

例如,视图控制器使用Facebook singleton模型发出请求,但希望将自身设置为该请求的委托,以便该模型在请求完成时调用该委托。 但是这个模型是单例的,它只有一个委托(我希望它保持这样)。 那么,在每次调用之前,我是否覆盖Facebook singleton中的代理指针?(不好,因为另一个请求可能同时使用同一个单例启动,委托将再次被覆盖)


那么什么是好的架构呢?在应用程序中重用模型的最佳实践是什么?

我的建议是创建您自己的代理协议,并将ViewController注册为singleton模型的代理。您可以通过多种方式自由地执行此操作,您可以拥有多个代理(通过将代理保留在singleton中的数组中)。

我最终为我的模型使用了singleton,它与以下获取sharedInstance(singleton)的线程安全代码配合得非常好

在iOS中使用键值观察(KVO)也能发挥巨大作用。我可以观察模型中属性的更改,并在视图控制器中做出反应。IMO允许创建非常干净和可理解的代码。(查阅并喜爱:)


有一点我也在使用一个模型,将它设置为一个委托,并给它一组委托,然后将委托方法广播给所有观察者,我发现这也很好。

我的Facebook模型已经有一个自定义协议,另一个模型再次使用该协议。所以实际上,它是查看控制器->用户管理模型->Facebook模型。这使得整个学员的工作变得不容易。。
+(QuizManager *)sharedInstance
{
    static dispatch_once_t pred;
    static QuizManager *shared = nil;

    dispatch_once(&pred, ^{
        shared = [[QuizManager alloc] init];
    });
    return shared;
}