2010-10-19 19 views
16

Nur eine kurze Frage, wenn ich darf, ich habe immer (seit Lernen obj-c) geschrieben int Eigenschaften wie folgt ...@property für Int-Typ?

@property(nonatomic, assign) int myValue; 

ich jetzt denke ich, dass dies übertrieben sein könnte und ich könnte genauso gut schreiben ...

@property int myValue; 

einfach nur neugierig, ich weiß, dass „zuweisen“ ist das Standardverhalten und dass „nonatomic“ kann fraktioniert schneller sein ...

alles Gute

Gary

Antwort

8

Nun, die Frage Unteilbarkeit zu erklären ist ein separates man davon, ob Sie explizit deklarieren Sie Attribute, die die Standardeinstellung sind. Ersteres hängt von der Art Ihres Codes ab - gibt es wahrscheinlich strittigen Multithread-Zugriff auf das Eigentum?

In Bezug auf die letzteren ist es meistens eine Frage des Stils, aber im Allgemeinen denke ich, dass Sie auf der Seite der expliziten Klarheit irren sollten. Wie viele Sekunden Ihres Lebens kostet es, diese wenigen Tastenanschläge einzugeben?

2

Nichtatomar generiert weniger Code und ist etwas schneller. Ich stimme zu, dass es sehr ausführlich ist.

Wenn Ihre Anwendung mehrere Threads verwenden, werden Sie froh sein, diese expliziten Qualifikations gesetzt zu haben, wenn Sie seltsame Fehler auftreten ...

33
@property(nonatomic, assign) int myValue; 

nicht das gleiche ist wie

@property int myValue; 

Der Standardwert für eine Eigenschaft Atom ist (es gibt kein explizites Schlüsselwort atomic). Das zweite Beispiel ist eine atomare Eigenschaft. Für eine Eigenschaft des primitiven Typs weiß ich nicht, ob eine Verriegelung auftritt, aber wahrscheinlich wird eine Speicherschreibbarriere eingeführt (d. H. Der Setzer wird den Wert zwingen, in den Hauptspeicher statt nur in den Cache zurückgeschrieben zu werden). Somit sind atomare Eigenschaften wesentlich langsamer als nicht atomare Eigenschaften. Als Bruchteil der gesamten Ausführungszeit des Programms könnten sie jedoch immer noch einen sehr kleinen Prozentsatz darstellen. Sie werden es nicht wissen, bis Sie Ihren Code profiliert haben.