2011-06-29 10 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サンプルコードがこのように意図的にまたは偶然に書き込まれているかどうかはわかりません。しかし、私の推測が正しいとすれば、それはかなり実装に依存するので、私はそれを機能として利用すべきではないと思う。

関連する問題