2010-01-14 25 views
8

Dans les documents que je lisais, @dynamic crée les méthodes d'accès à l'exécution, tandis que @synthesize créera les accesseurs au moment de la construction. Alors laissez-moi deviner: @dynamic économise de la mémoire et le code reste plus petit dans les pages de mémoire? ou quoi? et quelles autres différences y a-t-il entre celles-ci? Est-il correct de dire: "C'est toujours une bonne idée d'utiliser @dynamic plutôt que @synthesize"? Je veux dire ... si cela économise vraiment de la mémoire, pourquoi pas?Quelles sont les différences entre @dynamic et @synthesize?

Mais je suppose que @dynamic a un certain désavantage sur @synthesize, sinon tout le monde utiliserait @dynamic. Alors, quels sont les inconvénients?

Répondre

21

Les propriétés dynamiques n ° ne sont pas générées automatiquement. marqueur @dynamic propriétés indique au compilateur que vous fournirez l'accesseur et setters en quelque sorte:

De Objective-C Programming Language Guide:

@dynamic

Vous utilisez le mot-clé @dynamic pour indiquer au compilateur que vous accomplirez le contrat d'API impliqué par une propriété soit en fournissant des implémentations de méthode directement ou à l'exécution en utilisant d'autres mécanismes tels que le chargement dynamique de code ou la résolution de méthode dynamique.

7

Non, @dynamic indique que les implémentations seront fournies au moment de l'exécution. @synthesize indique au compilateur de créer les implémentations pour vous. Vous utiliserez @dynamic avec, par exemple, des données de base, qui génèrent des implémentations de propriété au moment de l'exécution. Si vous n'utilisez pas non plus, le compilateur suppose que vous allez fournir les implémentations.

2

Non, @dynamic n'obtiendra aucun avantage de taille de mémoire/code