为什么Apple的示例代码项目IKImageViewDemo没有AppDelegate类?

时间:2014-08-22 04:55:34

标签: objective-c xcode5 osx-mavericks

我正在研究如何在我的应用中使用IKImageView。我从Apple网站下载了以下演示。

https://developer.apple.com/library/mac/samplecode/IKImageViewDemo/Introduction/Intro.html#//apple_ref/doc/uid/DTS10004049

我不明白的一件事是:这个项目只实现了一个Controller类。

@interface Controller : NSObject
{ 
 ...

我不明白它是如何工作的。如果我在XCode中创建一个新项目,它通常会生成一个实现AppDelegate接口的NSApplicationDelegate类。

我不知道我是否正确理解了这种机制。

以下步骤是否描述了它的工作原理?

1)在info.plist中,它指定主要包是MainMenu.xib

2)Window被绑定到Controller,如此

enter image description here

3)当应用程序启动时,它会从Windows加载MainMenu.xib,而Controller类将从那里接管Windows交互。

2 个答案:

答案 0 :(得分:1)

这是一个非常古老的示例代码。它早于为您生成应用程序委托的Xcode项目模板。 那时候,早期的Xcode和ProjectBuilder(它的旧名称) 让你做到这一点。

很多旧的示例代码都有这种情况。只要内容被nib加载启动,就会发生魔法,对象被实例化并连接

如果你有一个简单的控制器继承自NSObject并且它在你的主nib文件中有一个代理,它将被创建。如果您还将其代理作为委托连接到nib中的某个视图或控件,则所有这些都会发生。

从技术上讲,您不需要作为NSApplication对象委托的对象。但实际上这是一个很好的最佳实践,任何非平凡的应用程序都会有更多。

在应用程序启动时调用C函数NSApplicationMain()时会发生很多魔法。

如果日期书中的Cocoa在果壳中很好地涵盖了这一点,那么旧的和在很多方面都是如此。

答案 1 :(得分:1)

是的,你几乎描述了它是如何运作的以及它在做什么。

它依赖于NSApplicationDelegate是一个非正式协议的事实,并且它没有声明Controller符合它并正在使用NIB来启动应用程序