Formal Protocol 與 Informal Protocol

@protocol 這個關鍵字是在 Objective-C 2.0 之後出現的,在這之前要定義 protocol,則是寫成 NSObject 的 category,前者叫做 formal protocol,後者則稱為 informal protoco。UIKit 問世時就採用 Objective-C 2.0 語法,至於 Mac OS X,蘋果在 2008 年開始大幅改寫 Foundation 與AppKit,現在(2012 年)絕大多數可以看到的 protocol,都是 formal protocol,但如果你在 maintain 一份稍微有點歷史的程式,或是在蘋果少數的API 中,還是可以看到 informal protocol。

在 Core Animation 裡頭,就可以看到CALayerDelegateCALayoutManagerCAAnimationDelegate,都還是informal protocol。其中 CALayerDelegateCALayoutManager兩者之間還夾著 CAAction 這個 formal protocol—在兩個 informal protocol中間夾著一個 formal protocol,實在讓人很反感—為什麼不一起改掉呢?至於CAAnimationDelegate 也很怪異:CAAnimation 的 delegate 不是用assign,而是會 retain 起來。

results matching ""

    No results matching ""