Динамическое разрешение CALayer и CAAnimation не реализованных методов доступа к свойствам - PullRequest
2 голосов
/ 29 июня 2011

Я обнаружил, что CALayer и CAAnimation не только расширяют протокол 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 + resolInstanceMethod: .

Я видел использование этого динамического разрешения в образце кода ImageBrowser WWDC 2010, но не могу найти никакой документации, подтверждающей эту функцию. Вот мне и интересно:
Является ли это динамическое разрешение предписанным поведением, которое я могу использовать в своем собственном коде?

1 Ответ

1 голос
/ 01 июля 2011

После дальнейших размышлений у меня есть собственное предположение: чтобы расширить протокол NSKeyValueCoding, CALayer и CAAnimation предлагают динамическое разрешение для всех не реализованных средств доступа к свойствам в их реализации + resolInstanceMethod: .В качестве побочного эффекта также рассматриваются @dynamic свойства без методов доступа.

Я не уверен, что пример кода WWDC написан таким образом преднамеренно или случайно.Но если мои предположения верны, то это в значительной степени зависит от реализации, поэтому я думаю, что мы не должны использовать это как функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...