Application Delegate类的要点

时间:2010-04-14 13:33:02

标签: objective-c

在Objective-C中将变量和方法签名放在ApplicationDelegate.h中的主要原因是什么?通过这样做,所有这些方法和变量都可以被另一个视图控制器类看到?那是关键吗?

而且:每个项目中只有一个应用程序委托类吗?

2 个答案:

答案 0 :(得分:3)

Application Delegate(是的,每个应用程序只有一个)是Cocoa和Cocoa Touch应用程序中Controller层的主干。它的主要功能是在某些情况下(例如应用程序终止,应用程序打开等)自定义NS / UIApplication的行为。它也常用于将代理人分配给其他响应者(例如表格视图,大纲视图等)。

在小型应用程序中,它通常充当大多数界面元素的委托和数据源,但正如Felixyz所指出的,如果应用程序增长,这可能会迅速恶化。

答案 1 :(得分:2)

“通过执行此操作,所有这些方法和变量都可以被另一个视图控制器类看到?这是重点吗?”

当然,任何导入app控制器标头的类都可以访问公共属性和方法(和ivars),但这适用于任何类,而不仅仅是应用程序委托。

在应用程序委托中放置应用程序中的一些重要对象和方法是很常见的。通过这种方式,是的,这通常是您看到app delegate class上定义的变量和方法的原因。

这有时候很有意义,但它很快就会恶化为 非常 糟糕的设计。你应该确保不要将app delegate用作一个篮子,你可以在应用程序中抛出所有共享状态和功能。我正在使用一些代码,其中某人现在正在执行此操作,并且非常很难更改和重构功能。

这只是众所周知的将全局状态用于一切的问题的一个版本。简而言之,您应该分析功能并将其划分为单独的类或类组。尽量让你的应用代表尽可能苗条!

编辑:......并在此问题上阅读Matt Gallagher's post