Почему динамический @property CALayer может вызывать метод установки ter - PullRequest
0 голосов
/ 26 декабря 2018

Я тестирую @dynamic в NSObject и CALayer. Когда класс DynamicTest наследует NSObject, запустите

test.title = @ "title";

он завис, потому что тамв классе DynamicTest нет метода установки / получения.

@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 что-то для этого сделал ,Я хочу знать детали , С нетерпением жду вашей помощи , спасибо 101

1 Ответ

0 голосов
/ 26 декабря 2018

Прочтите Руководство по программированию базовой анимации: Расширения кодирования значения ключа :

Классы CAAnimation и CALayer являются классами контейнера, совместимыми с кодированием значения ключа, которыеозначает, что вы можете установить значения для произвольных ключей.Даже если ключ someKey не является объявленным свойством класса CALayer, его значение можно установить следующим образом:

[theLayer setValue:[NSNumber numberWithInteger:50] forKey:@"someKey"];

Хотя это явно не указано, эта поддержкараспространяется на предоставление динамических методов доступа.

...