设计Cocoa应用程序

时间:2011-07-18 12:34:01

标签: objective-c cocoa design-patterns

我正在编写一个Cocoa应用程序,我不断添加按钮,视图和图层。然而,由于所有这些添加,我的appdelegate类变得相当大并且难以阅读。因此,我决定将一些与UI相关的调用从appdelegate移到其他类。但是,似乎UI调用只能在主线程上完成,并且(如果我错了,请纠正我)来自appdelegate。我将调用转移到其他类的实验也让我遇到了确保在主线程上正确执行所有操作的困难。因此,我的所有UI调用仍然是从appdelegate类调用的。

我的问题是如何改进我的应用程序的设计?我是否可以通过避免线程问题的方式从appdelegate之外的其他类调用UI?我可以将appdelegate类拆分为严重文件,一个用于按钮,一个用于视图等,还是有更好的方法来设计应用程序?任何有关示例或教程/书籍链接的建议都非常感谢。

谢谢大家。干杯,特隆德

2 个答案:

答案 0 :(得分:4)

Cocoa严重依赖于Model-View-Controller架构。关于如何在Cocoa Design Patterns引用中在Cocoa中使用此模式,有一些非常好的阅读。基本上,您希望尽可能少地在应用程序委托中使用UI代码。如果可能,应用代理应负责以进行应用级控制。将UI控制器代码放在单独的控制器类中要好得多。 MVC架构引领您走上正确的道路; Cocoa提供视图,您编写模型类 - 应用程序的“业务”逻辑 - 然后使用视图控制器来协调两者。

答案 1 :(得分:3)

UI调用需要从主线程完成,该部分是正确的。但是,您无需从应用程序委托中执行此操作。只要在主线程上完成,你就可以随心所欲地完成它们。

现在,某些UI事物可以在其他线程上完成,但AFAIK UIKit并不是设计为线程安全的,因此可能会出现奇怪的事情和崩溃。

将事物拆分成其他专门的类是没有错的。我一直这样做。您可能希望引入一个存储和管理状态的对象,并可以访问您的专用“控制器”。

如果您可以将应用分成“页面”,那么请查看UIViewController以及它为您提供的内容。这可能是最佳选择。