为什么CALayer的动态@property可以调用setter方法?

时间:2018-12-26 02:31:01

标签: ios objective-c calayer

我在NSObject和CALayer中测试@dynamic,当DynamicTest类继承NSObject时,运行

  

test.title = @“标题”;

它崩溃了,因为DynamicTest类中没有setter / getter方法。

@interface DynamicTest : NSObject

@property NSString *title;

@end

@implementation DynamicTest
@dynamic title;

@end

DynamicTest *test = [[DynamicTest alloc] init];
test.title = @"title";//crashed

但是当DynamicTest类继承CALayer时,它可以工作!,

@interface DynamicTest : CALayer

@property NSString *title;

@end

@implementation DynamicTest
@dynamic title;

@end

DynamicTest *test = [[DynamicTest alloc] init];
test.title = @"title";//it works!

我知道CALayer为此做了些事情,我想知道细节,期待您的帮助,谢谢!

1 个答案:

答案 0 :(得分:2)

阅读Core Animation Programming Guide: Key-Value Coding Extensions

  

list-group<div class="list-group list-group-horizontal justify-content-center"> .... .... </div> 类是符合键值编码的容器类,这意味着您可以为任意键设置值。即使键CAAnimation不是CALayer类的声明属性,您仍然可以如下设置其值:

someKey

尽管未明确说明,但此支持扩展到提供动态访问器。