Worin bestehen die Unterschiede zwischen @dynamic und @synthesize?

8

Aus den Dokumenten, die ich gelesen habe, erstellt @dynamic die Accessor-Methoden zur Laufzeit, während @synthesize die Accessoren zur Build-Zeit erstellt.

Also lassen Sie mich raten: @dynamic spart etwas Speicher und Code wird in Speicherseiten kleiner gehalten? oder was? und welche anderen Unterschiede gibt es zwischen diesen?

Wäre es in Ordnung zu sagen: "Es ist immer eine gute Idee, @dynamic statt @synthesize zu verwenden"? Ich meine ... wenn das wirklich Erinnerung speichert, warum nicht?

Aber ich denke @dynamic hat etwas Nachteil gegenüber @synthesize, sonst würde jeder @dynamic benutzen. Also, was sind die Nachteile?

    
openfrog 14.01.2010, 17:40
quelle

3 Antworten

21

Nein. Dynamische Eigenschaften werden nicht automatisch generiert. @dynamic Eigenschaftsmarker zeigt dem Compiler an, dass Sie den Accessor und die Setter irgendwie bereitstellen:

Aus Ziel-C Programmiersprache :

  

@dynamic

     

Mit dem Schlüsselwort @dynamic teilen Sie dem Compiler mit, dass Sie den von einer Eigenschaft implizierten API-Vertrag erfüllen, indem Sie Methodenimplementierungen direkt oder zur Laufzeit unter Verwendung anderer Mechanismen wie dynamisches Laden von Code oder dynamische Methodenauflösung bereitstellen. p>

    
notnoop 14.01.2010, 17:44
quelle
7

Nein, @dynamic sagt, dass die Implementierungen zur Laufzeit bereitgestellt werden. @synthesize weist den Compiler an, die Implementierungen für Sie zu erstellen. Sie würden @dynamic beispielsweise mit Core Data verwenden, die zur Laufzeit Eigenschaftenimplementierungen generiert. Wenn Sie keinen der beiden verwenden, nimmt der Compiler an, dass Sie die Implementierungen bereitstellen werden.

    
Alex 14.01.2010 17:46
quelle
2

Nein, @dynamic wird Ihnen keine Speicher- / Codegrößenvorteile bieten

    
vaddieg 14.01.2010 18:07
quelle