無所不在的 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 裡頭開了一個新專案之後,下一步往往是實作 application:didFinishLaunchingWithOptions: 這個method,但是要了解整個程式的進入點,我們要從 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 ""