2011-12-21 34 views
2

我确实为这个主题找到了一些建议,但仍然有一些东西对我开放。iOS:模型 - 应用程序中的体系结构

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

例如,我正在用Facebook SDK构建应用程序。我想有一个与Facebook API交流的模型类是有意义的。而且我猜这样做会让这个类变成单例(不一定是)。

但是面向iOS的Facebook SDK建立在委托之上。因此,您发送一个请求,并将响应返回到模型中的委托方法中。没关系,但我也想分配一个委托给模型,以便视图控制器被调用。

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

那么什么是好的建筑?在整个应用程序中重复使用模型的最佳实践是什么?

回答

2

最后我用单身的我的模型与得到一个sharedInstance(单身)

+(QuizManager *)sharedInstance 
{ 
    static dispatch_once_t pred; 
    static QuizManager *shared = nil; 

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

伟大的工作,以下线程安全的代码确实很好,也关键 - 价值 - 的使用在iOS中观察(KVO)。我可以观察模型中属性的变化,并在视图控制器中作出反应。海事组织这允许创建非常干净和易于理解的代码。 (查看它并喜欢它:http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueObserving/KeyValueObserving.html

在一点上,我也使用一个模型,并将其设置为一个代表,并给它一组代表,而不是将代表方法广播给所有观察者,我发现也很好。

2

我的建议是创建您自己的委托协议并将viewControllers注册为您的单例模型的委托。你可以在很多方面自由地做到这一点,你可以有多个委托(通过将代表保存在单例中的数组中)。

+0

我的Facebook模型已经有了一个自定义协议,它又被另一个模型使用。所以实际上它是视图控制器 - >用户管理模型 - > Facebook模型。 这使得整个委托工作不容易.. – cmart