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

Tha*_*nks 16 delegates uiapplication uiapplicationdelegate ios appdelegate

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

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

Rob*_*ier 37

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

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

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

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