В чем разница между @dynamic и @synthesize? - PullRequest
8 голосов
/ 14 января 2010

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

Итак, позвольте мне угадать: @dynamic экономит часть памяти, а код остается меньше на страницах памяти? или что? и какие еще различия между ними?

Было бы хорошо сказать: «Всегда лучше использовать @dynamic, а не @synthesize»? Я имею в виду ... если это действительно экономит память, то почему бы и нет?

Но я думаю, что @dynamic имеет некоторые недостатки перед @synthesize, иначе все просто использовали бы @dynamic. Так в чем же недостатки?

Ответы [ 3 ]

21 голосов
/ 14 января 2010

Нет. динамические свойства не генерируются автоматически. Маркер свойств @dynamic указывает компилятору, что you предоставит методы доступа и сеттеры каким-либо образом:

С Руководство по языку программирования Objective-C :

@dynamic

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

7 голосов
/ 14 января 2010

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

2 голосов
/ 14 января 2010

Нет, @dynamic не даст вам никаких преимуществ в размере памяти / кода

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