CALayer和CAAnimation对未实现的属性访问器的动态解析

我发现CALayer和CAAnimation不仅扩展了Core Key Extensions To Key-Value Coding中描述的NSKeyValueCoding协议,还为未实现的属性访问器提供了动态解析。 例如:

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

只需使用属性声明并声明它是@dynamic ,我就可以访问dot属性而无需实现其访问器:

 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示例代码中看到了这种动态分辨率的使用,但我找不到任何说明此function的文档。 所以我想知道:
这个动态分辨率是我可以在我自己的代码中使用的规定行为吗?

进一步思考后,我有自己的猜测:为了扩展NSKeyValueCoding协议,CALayer和CAAnimation在其+ resolveInstanceMethod:的实现中为所有未实现的属性访问器提供动态解析。 作为副作用,还包括没有访问器的@dynamic属性。

我不确定WWDC示例代码是有意还是无意地以这种方式编写的。 但是如果我的猜测是正确的,那么它依赖于实现,所以我认为我们不应该将它作为一个特性使用。