Каков общий случай использования @dynamic? - PullRequest
4 голосов
/ 24 декабря 2010

Есть предыдущий пост о разнице @synthesize и @dynamic.

Я хочу узнать больше о динамике с точки зрения того, как обычно использовать @dynamic.

Обычно мы используем @dynamic вместе с NSManagedObject

// Movie.h
@interface Movie : NSManagedObject {
}
@property (retain) NSString* title;
@end

// Movie.m
@implementation Movie
@dynamic title;
@end

На самом деле во время компиляции не генерируется получатель / установщик в соответствии с пониманием @dynamic, поэтому необходимо реализовать свой собственный получатель / установщик.

Мой вопрос заключается в том, что в этом случае NSManagedObject, какова грубая реализация getter / setter в суперклассе NSManagedObject?

Кроме приведенного выше случая, сколько еще случаев использовать @dynamic?

Спасибо

1 Ответ

4 голосов
/ 24 декабря 2010

@dynamic указывает компилятору, что вы планируете предоставить собственную реализацию для методов доступа, даже если компилятор в настоящее время не может их видеть.Если вы опустите @dynamic и не используете @synthesize, произойдет одно из двух:

  1. Если вы предоставили только половину метода доступа (например, метод получения без установщика включен)readwrite свойство), или вы используете GCC, компилятор предупредит вас.
  2. Если вы используете Clang для компиляции вашего кода, для вас будут автоматически созданы подходящие методы доступа. (Синтез по умолчанию официально не поддерживается.)

@dynamic, поэтому полезно, чтобы компилятор не выполнял одно из указанных выше действий.Это также может пригодиться, если вы реализуете свойство очень динамично, например, с помощью функций времени выполнения, но это редко требуется.

...