Что такое @dynamic в iPad / iPhone - PullRequest
10 голосов
/ 25 марта 2011

Мне просто интересно, что имеется в виду под @dynamic в target-c и как это работает. Любая помощь, пожалуйста

Ответы [ 3 ]

13 голосов
/ 25 марта 2011

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

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtDynamicResolution.html

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

В частности, посмотрите здесь;

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html

для примера того, как вы сконструируете свой динамический метод и поместите его во время выполнения.

Базовые данные используют этот механизм для предоставления средств доступа. Это довольно удивительно круто, когда вы копаетесь в этом:)

И, как примечание, метапрограммирование в ObjC не для слабонервных, не отправляйте его, пока вы не вздрогните, иначе ваши пользователи пострадают.

5 голосов
/ 25 марта 2011

Я цитирую книгу Apple Язык программирования Objective-C :

@ dynamic

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

Вы можете найти копию в формате PDF здесь .

2 голосов
/ 25 марта 2011

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

Вместо этого @synthesize создает для вас методы получения / установки.

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