什么最能描述应用程序代表?它如何适应整个概念?

时间:2009-05-06 09:33:04

标签: ios delegates appdelegate uiapplicationdelegate uiapplication

我想知道App Delegate的功能。它有一些很好的方法,如-applicationDidFinishLaunching,它将在应用程序完成启动时调用,依此类推。但究竟是什么呢?是否在UIApplicationMain函数中实例化了一些对象?

我的应用程序中的每个类都可以访问该App Delegate对象,它是如何工作的?网上是否有任何可视化这些关系的好图表?

2 个答案:

答案 0 :(得分:37)

在Cocoa中,委托是另一个对象在行为问题上遵循的对象,并告知其状态的变化。例如,UITableViewDelegate负责回答有关在进行选择或重新排序行时UITableView应如何表现的问题。 UITableView询问何时想知道特定行应该有多高。在Model-View-Controller范例中,委托是控制器,许多委托的名称以“Controller”结尾。

有明确说明的风险,UIApplicationDelegate是UIApplication的代表。这种关系在Cocoa(Mac)中比在Cocoa Touch(iPhone)中更明显,因为NSApplication委托能够更直接地控制NSApplication的行为(例如阻止应用程序终止)。 iPhone不允许对UIApplication进行太多控制,因此大多数UIApplicationDelegate都会被告知变化而不是积极的决策过程。

UIApplicationDelegate并非在应用程序的任何位置严格提供。单例UIApplication是([UIApplication sharedApplication]),通过它你可以找到它的委托。但这并不意味着应用程序中的每个对象都可以直接与应用程序委托对话。一般来说,我不鼓励开发人员让随机对象与应用代表交谈。通过Singletons,NSNotification或其他委托对象可以更好地解决以这种方式解决的大多数问题。

至于它的创作,在Mac上,应用代表并没有什么神奇之处。在大多数情况下,它只是由NIB实例化和连接的对象。但是,在iPhone上,如果由UIApplicationMain()实例化,则app委托可能会有些神奇。第四个参数是一个NSString,表示app委托的类,UIApplicationMain()将创建一个并将其设置为sharedApplication的委托。这允许您在没有NIB的情况下设置委托(在Mac上非常困难)。如果UIApplicationMain()的第四个参数是nil(就像它在Apple模板中那样),那么代理就会由主NIB创建并连接,就像主窗口一样。

答案 1 :(得分:3)

以这种方式实例化对象;

main-function查找info.plist中设置的主nib。 nib具有app委托,它被设置为某个必须实现UIApplicationDelegates及其所需方法的类。然后app appate加载一些viewcontroller。

它作为影响整个应用程序的事件的应用程序范围的回调对象,例如低内存等。