Formal Protocol 与Informal Protocol

@protocol这个关键字是在Objective-C 2.0 之后出现的,在这之前要定义protocol,则是写成NSObject 的category,前者叫做formal protocol,后者则称为informal protocol。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 ""