Что является обычным случаем для использования @Dynamic?
-
13-10-2019 - |
Вопрос
Есть предыдущий почта О разнице @synthesize и @dynamic.
Я хочу узнать больше о динамике с точки зрения того, как обычно использовать @Dynamic.
Обычно мы используем @dynamic вместе с nsmanagedObject
// Movie.h
@interface Movie : NSManagedObject {
}
@property (retain) NSString* title;
@end
// Movie.m
@implementation Movie
@dynamic title;
@end
На самом деле не существует сгенерированного getter/setter во время компилятора в соответствии с пониманием @dynamic, поэтому необходимо реализовать свой собственный getter/setter.
Мой вопрос: в этом случае nsmanagedObject, какова грубая реализация Getter/Setter в Super Class nsmanagedObject?
За исключением случаев, сколько других случаев использовать @Dynamic?
Спасибо,
Решение
@dynamic
Указывает компилятору, что вы планируете предоставить свою собственную реализацию для аксессуара (-ов), даже если компилятор не может их увидеть в настоящее время. Если вы опустите @dynamic
И не используйте @synthesize
, одна из двух вещей произойдет:
- Если вы предоставили только половину доступа (например, Getter без сеттера на
readwrite
свойство), или вы используете GCC, компилятор предупредит вас. Если вы используете Clang для компиляции вашего кода, вам будет автоматически сгенерироваться правильные аксессов.(Synthesize-By Default официально не поддерживается.)
@dynamic
Поэтому полезно, чтобы компилятор не выполнял любое из вышеперечисленного. Это также может пригодиться, если вы реализуете свойство очень динамичным образом, как в случае функций выполнения, но это редко необходимо.