无所不在的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中众多的元件该如何使用,以及怎样用比较好的方式设计自己的元件,就不是问题了

results matching ""

    No results matching ""