我發現CALayer和CAAnimation不僅擴展了Core Animation Extensions To Key-Value Coding中所述的NSKeyValueCoding協議,還爲未實現的屬性訪問器提供了動態分辨率。例如:CALayer和CAAnimation的未實現屬性訪問器的動態分辨率
@interface DotLayer : CALayer
@property (nonatomic, retain) id dot;
@end
@implementation DotLayer
@dynamic dot;
@end
只需用財產申報,並說明它是@dynamic,我可以訪問點屬性,而不執行它的存取:
DotLayer *layer = [DotLayer layer];
NSLog(@"layer responds to dot: %d", [layer respondsToSelector:@selector(dot)]);
layer.dot = nil;
NSLog(@"%@", [layer dot]);
經過進一步調查,我發現這動態分辨率由CALayer和CAAnimation的特殊實現+ resolveInstanceMethod:完成。
我在WWDC 2010的ImageBrowser示例代碼中看到了此動態分辨率的使用情況,但找不到任何說明此功能的文檔。所以我想知道:
這個動態解決方案是一種規定的行爲,我可以在我自己的代碼中使用?