开发者

CALayer and CAAnimation's dynamic resolution of unimplemented property accessors

I开发者_开发问答 found that CALayer and CAAnimation don't only extend the NSKeyValueCoding protocol as described in Core Animation Extensions To Key-Value Coding, but also offer dynamic resolution for unimplemented property accessors. For example:

@interface DotLayer : CALayer
@property (nonatomic, retain) id dot;
@end

@implementation DotLayer
@dynamic dot;
@end

Simply with a property declaration and stating it is @dynamic, I can access dot property without implementing its accessors:

DotLayer *layer = [DotLayer layer];
NSLog(@"layer responds to dot: %d", [layer respondsToSelector:@selector(dot)]);
layer.dot = nil;
NSLog(@"%@", [layer dot]);

After further investigation, I found this dynamic resolution is done by CALayer and CAAnimation's special implementation of +resolveInstanceMethod:.

I saw usage of this dynamic resolution in ImageBrowser sample code of WWDC 2010, but I can not find any documentation stating this feature. So I'm wondering:

Is this dynamic resolution a prescribed behavior that I can make use of in my own code?


After further thought, I have my own guess: To extend the NSKeyValueCoding protocol, CALayer and CAAnimation offer dynamic resolution for all unimplemented property accessors in their implementation of +resolveInstanceMethod:. As a side effect, @dynamic properties without accessors are also covered.

I'm not sure whether the WWDC sample code is written this way intentionally or accidentally. But if my guess is correct, it is quite implementation dependent so I think we should not utilize it as a feature.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜