2010-01-14 13 views
8

Z dokumentów, które czytałem, @dynamic tworzy metody dostępu w czasie wykonywania, podczas gdy @synthesize tworzy akcesory w czasie kompilacji.Jakie są różnice między @dynamic i @synthesize?

Pozwól mi zgadnąć: @dynamic zapisuje trochę pamięci i kod jest mniejszy na stronach pamięci? albo co? i jakie są między nimi różnice?

Czy można dobrze powiedzieć: "Zawsze warto używać @dynamic zamiast @synthesize"? To znaczy ... jeśli to oszczędza naprawdę pamięci, dlaczego nie?

Ale myślę, że @dynamic ma pewną wadę w stosunku do @synthesize, w przeciwnym razie wszyscy użyliby @dynamic. Jakie są wady?

Odpowiedz

21

Nie właściwości dynamiczne nie są generowane automatycznie. @dynamic właściwości marker wskazuje kompilator że ty zapewni akcesor i ustawiające jakoś:

Od Objective-C Programming Language Guide:

@dynamic

użyć słowa kluczowego @dynamic aby poinformować kompilator, że będzie spełniać umowa API implikowana przez właściwość poprzez dostarczanie implementacji metody bezpośrednio lub w czasie wykonywania przy użyciu innych mechanizmów, takich jak dynamiczne ładowanie kodu lub rozwiązywanie dynamicznej metody.

7

Nie, @dynamic mówi, że implementacje będą dostarczane w czasie wykonywania. @synthesize mówi kompilatorowi, aby utworzył implementacje. Używałbyś @dynamic z, na przykład, Core Data, która generuje implementacje właściwości w środowisku wykonawczym. Jeśli nie używasz żadnej, kompilator zakłada, że ​​dostarczy implementacje.

2

Nie, @dynamic nie dostarczy Ci żadnych korzyści związanych z pamięcią/rozmiarem kodu

Powiązane problemy