无所不在的Delegate
由于在Objective-C 语言中,delegate 相当于event handler的用途,所以,当你在其他平台中看到event handler 用得多频繁,就等于delegate 用得多频繁。举例来说:
- 在使用
NSURLConnection
抓取网路上的资料的时候,无论收到了HTTP response code、是否连线失败、是否连线结束…都是透过delegate回传。 - 在使用Core Location的时候,如果
CLLocationManager
找到了我们的所在位置,或是发现我们正在移动,也都会透过delegate通知。 - 当我们要使用手机拍照、传送简讯或是电子邮件等等,当照片拍完,会用delegate 回传image 物件,简讯或是电子邮件传送成功,也会用delegate 告诉我们执行完毕。
甚至,当我们在写一个iOS应用的第一步,其实都是在实作一个delegate method。我们在Xcode里头开了一个新Project之后,下一步往往是实现application:didFinishLaunchingWithOptions:
这个method,但是要了解整个APP的进入点,我们要从main.m
来看。里头通常只有简短的几行:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, nil));
}
}
一个iOS程序是从main
这个function开始,接着透过调用UIApplicationMain
建立UIApplication
这个Singleton实例。UIApplication
用来代表一个应用程序的基本状态,包括icon上面该显示多少则push notification的数量、支持水平还是垂直画面、是否显示状态栏等,当UIApplication
被建立起来后,就要通知它的delegate—程式已经开启了,请进行下一步,这个delegate method就是application:didFinishLaunchingWithOptions:
,我们在这边建立基本的view controller与window,显示出来。
也就是说,当我们在开始写第一行iOS 程式的时候,我们就起码需要了解什么是Singleton 和delegate,但是在了解之后,想要知道Mac OS X 与iOS中众多的元件该如何使用,以及怎样用比较好的方式设计自己的元件,就不是问题了