2011-06-29 24 views
2

我發現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示例代碼中看到了此動態分辨率的使用情況,但找不到任何說明此功能的文檔。所以我想知道:
這個動態解決方案是一種規定的行爲,我可以在我自己的代碼中使用?

回答

1

進一步的思考之後,我有我自己的猜測: 要擴展的NSKeyValueCoding協議,CALayer的和CAAnimation提供在其實施的+ resolveInstanceMethod所有未實現的屬性訪問器動態分辨率:。作爲副作用,還包括了不帶訪問器的@dynamic屬性。

我不確定WWDC示例代碼是以這種方式有意還是無意地寫入的。但是,如果我的猜測是正確的,這是相當實施的依賴,所以我認爲我們不應該把它作爲一個功能。