Unterschiede zwischen starken und schwachen in Objective-C
Ich bin neu in Obj-C, also meine erste Frage ist:
Was sind die Unterschiede zwischen strong
und weak
im @property
Deklarationen von Zeigern auf Objekte?
Auch nicht, was nonatomic
bedeuten?
das ist eigentlich eine gute Fragen, manchmal haben wir vergessen, wie das grundlegende Konzept von stark/schwach und atomic/nonatomic-Einstellungen.... 🙂 Danke für die Erinnerung uns darüber...
Was komisch ist, dass die vorgeschlagene einfache Suche bei google führt mich hier lol. #circularreference
Ich eher nicht Vertrauen viele Antworten auf google, sondern beziehen sich immer auf S. O für intelligente Antworten
Was komisch ist, dass die vorgeschlagene einfache Suche bei google führt mich hier lol. #circularreference
Ich eher nicht Vertrauen viele Antworten auf google, sondern beziehen sich immer auf S. O für intelligente Antworten
InformationsquelleAutor Mark Pegasov | 2012-06-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen starken Bezug (die Sie verwenden, in den meisten Fällen) bedeutet, dass Sie wollen, um die "eigenen" das Objekt, Sie verweisen mit dieser Eigenschaft/variable. Der compiler kümmert sich darum, dass jedes Objekt, das Sie zuweisen dieser Eigenschaft wird nicht zerstört werden, solange Sie zeigen, mit einem starken Verweis. Nur wenn Sie die Eigenschaft auf
nil
wird das Objekt zerstört (es sei denn, ein oder mehrere andere Objekte halten auch einen starken Bezug zur it).Dagegen mit einer schwachen Referenz erklären Sie, dass Sie nicht wollen, um die Kontrolle über die Objekt-Lebensdauer. Das Objekt, das Sie referenzieren, schwach, lebt nur auf, weil mindestens ein anderes Objekt hat einen starken Bezug zur it. Sobald das nicht mehr der Fall, wird das Objekt zerstört wird und Ihre schwache Eigenschaft wird automatisch gesetzt
nil
. Die häufigsten Anwendungsfälle von schwachen Referenzen in iOS:delegieren Eigenschaften, die oft verwiesen wird schwach um zu vermeiden, behalten Zyklen, und
Untersichten/Steuerelemente view-controller-Hauptansicht, weil diese Ansichten sind schon stark gehalten von der Hauptansicht.
atomic Kontra nonatomic bezieht sich auf die thread-Sicherheit der getter-und setter-Methoden, die der compiler erzeugt für die Eigenschaft. atomic (default) sagt dem compiler, um die accessor-Methoden thread-sicher (indem eine Sperre, bevor eine ivar zugegriffen wird) und nonatomic das Gegenteil ist der Fall. Der Vorteil nonatomic etwas höhere Leistung. Auf iOS, Apple nutzt nonatomic für fast alle Ihre Eigenschaften, so dass der Allgemeine Rat ist für Sie das gleiche zu tun.
Das hängt davon ab, was du meinst mit der thread-Sicherheit.
atomic
garantiert, dass die Eigenschaften sicher sein kann, Lesen und schreiben aus mehreren threads zur gleichen Zeit. Das bedeutet nicht, dass ein Objekt, dessen Eigenschaften sind alleatomic
automatisch thread-safe.Mit tollen details. Ich denke, dass ich nicht wirklich bis jetzt. Danke.
Als pro apple-Dokumentation, Atom-und nonatomic sollte gleichbedeutend sein mit "thread safety". developer.apple.com/library/ios/documentation/cocoa/conceptual/...
"Hinweis: die Eigenschaft Atomarität ist nicht gleichbedeutend mit einem Objekt der thread-Sicherheit." developer.apple.com/library/ios/documentation/cocoa/conceptual/...
InformationsquelleAutor Ole Begemann
Kann es hilfreich sein, zu denken, über starke und schwache Referenzen in Bezug auf die Ballons.
Einen Ballon nicht wegfliegen, solange mindestens eine person ist das festhalten an einer Schnur daran. Die Anzahl der Personen, die Saiten der retain-count. Wenn niemand das festhalten an einer Schnur, der ballon fliegt Weg (dealloc). Viele Menschen können sich strings in den selben Ballon. Sie können get - /set-Eigenschaften und aufrufen von Methoden auf der referenzierten Objekt mit den beiden starken und schwachen Referenzen.
Einen starken Bezug ist wie das festhalten an einem string zu einem Ballon. Solange Sie halten eine Schnur am Ballon befestigt ist, wird es nicht Fliegen.
Einer schwachen Referenz ist wie der Blick auf den Ballon. Sehen Sie, greifen Sie auf die Eigenschaften aufrufen seiner Methoden, aber du hast keine Schnur auf die Sprechblase. Wenn jeder, der das festhalten an der saite Los, der Ballon fliegt Weg, und Sie können keinen Zugriff mehr.
+2 (wenn nur ich könnte). Im ernst, wirklich kreative Erklärung!
Nach 1 und ein halb Jahren von iOS zu entwickeln, denke ich, nur jetzt hab ich klar verstanden, was
strong
undweak
eigentlich bedeuten.Retain-Zyklus ist, wie man 2 strings an den ballon, einer von Ihnen ist im Besitz von Ihnen (so dass Sie diese ballon), der andere ist im Besitz der ballon (so dieser ballon besitzt Sie). Da Sie nur Zugang zu Ihrem string, wie lässt du den ballon gehen, wenn der ballon nicht gehen wollen? So ist es besser, Sie eigenen ballon (stark), während der ballon nicht besitzen, Sie (schwach). Wenn Sie wollen Sie gehen zu lassen, schneiden Sie einfach die Zeichenfolge 🙂
Lesen Sie sein Profil, er ist ein iOS-instructor. Sehr kreative Erklärung!!! Hut Ab 🙂
InformationsquelleAutor MJN
starke: weist den eingehenden Wert-denn es bewahrt den eingehenden Wert und Freigabe der vorhandene Wert der Instanz-Variablen
schwach: weist den eingehenden Wert zu, ohne dass es.
Also der grundlegende Unterschied ist die Beibehaltung der neuen variable.
Prinzipiell wollen Sie beibehalten, aber es gibt Situationen, in denen Sie nicht wollen, es zu haben, ansonsten erhalten Sie eine retain-Zyklus und kann nicht den Speicher frei der Objekte. ZB. obj1 behält obj2 und obj2 behält obj1. Zur Lösung dieser Art von situation, die Sie verwenden schwache Referenzen.
InformationsquelleAutor Pfitz
Eine dummy-Antwort :-
Ich denke, die Erklärung ist gegeben in der obigen Antwort, so bin ich nur gonna sagen Sie wo zu verwenden
STRONG
und woWEAK
:Verwendung von
Weak
:-1. Die Delegierten
2. Filialen
3. Untersichten
4. Kontrollen, etc.
Verwendung von
Strong
:-Übrigen überall ist nicht in
WEAK
.webView, Kartenansicht,etc.
eigentlich die meisten der Untersicht, ziehen wir per Drag & drop in die storyboard
InformationsquelleAutor shubham mishra
starke und schwach, diese Stichwörter dreht sich um Objekt Eigentum in Objective-C
Was ist das Objekt Eigentum ?
Pointer-Variablen bedeuten Eigentum an den Objekten, die Sie zeigen.
Jederzeit eine pointer-variable zeigt auf ein Objekt, wird dieses Objekt einen Eigentümer hat und am Leben bleiben. Dies ist bekannt als ein starke Referenz.
Einer Variablen kann Optional nicht ein Objekt in Besitz nehmen, dass es Punkte zu. Eine variable, die nicht ein Objekt in Besitz nehmen, ist bekannt als ein schwach Referenz.
Schauen Sie für eine detaillierte Erklärung hier Demystifying @property und die Attribute
InformationsquelleAutor Vinay Jain
Hier, Apple-Dokumentation hat erklärt, der Unterschied zwischen schwacher und starker Eigenschaft, mit verschiedenen Beispielen :
https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210-CH5-SW3
Hier, In diesem blog-Autor gesammelt hat, die alle Eigenschaften im gleichen Ort. Es wird Ihnen helfen zu vergleichen Eigenschaften Eigenschaften :
http://rdcworld-iphone.blogspot.in/2012/12/variable-property-attributes-or.html
InformationsquelleAutor subhash kumar singh
starke ist die Standardeinstellung. Ein Objekt bleibt "lebendig", solange gibt es eine starke Zeiger darauf.
schwach gibt einen Hinweis, dass nicht das referenzierte Objekt lebt. Eine schwache Referenz ist gesetzt auf null, wenn es keine starken Referenzen auf das Objekt.
InformationsquelleAutor Ankit Vyas
Verstehen, Starke und Schwache Referenz betrachten Beispiel, nehmen wir an, wir haben die Methode genannt, wie displayLocalVariable.
In den oben Gültigkeitsbereich der Methode der variable myName ist beschränkt auf displayLocalVariable Methode, wenn die Methode beendet wird myName variable, die mit der Zeichenfolge "ABC" wieder freigegeben ist, aus dem Speicher.
Was nun, wenn wir wollen, halten Sie den Wert der variable myName in unserer gesamten view-controller-life-cycle. HIERFÜR erstellen wir die Eigenschaft namens als Benutzername, die haben eine Starke Referenz auf die variable myName(siehe
@property(nonatomic,strong) NSString* username;
undself.username = myName;
im code unten), wie unten,Nun im obigen code können Sie sehen, myName zugeordnet wurde, selbst.Benutzername und Selbstbestimmung.username wird eine starke Referenz(als wir erklärten, im interface mit der @ - Eigenschaft) MeinName(indirekt, es ist mit einer Starken Bezug zu "ABC" string). Folglich String myName werden nicht freigegeben, vom Speicher bis zum selbst.Benutzername ist lebendig.
Betrachten wir nun die Zuordnung myName zu dummyName, die eine Schwache Referenz, selbst.dummyName = myName; im Gegensatz zu den Starken Bezug Schwach werden halten Sie die myName nur bis zu es zu einer Starken Referenz zu myName. Siehe code unten, um zu verstehen, Schwache Referenz,
Im oben genannten code, da der Schwache Verweis auf myName(also selbst.dummyName ist, mit Schwachen Verweis auf myName), aber es gibt keine Starken Bezug zur myName, daher selbst.dummyName nicht in der Lage, halten Sie die myName-Wert.
Nun wieder betrachten wir den code unten,
In obigem code selbst.Benutzernamen hat einen Starken Bezug zur myName, daher selbst.dummyName haben nun einen Wert von myName auch nach der Methode endet da myName hat einen Starken Bezug zugeordnet.
Nun, wenn wir eine Starke Referenz auf eine variable ist retain count bekommen, um eins erhöht und die variable wird auch nicht freigegeben, bis iy behalten die Zähler bei 0.
Hoffe, das hilft.
InformationsquelleAutor Mahadev Mandale
Starke: im Grunde Verwendet, Mit Eigenschaften, die wir verwendet, um zu erhalten oder senden von Daten aus/in andere Klassen.
Schwach: in der Regel alle Anschlüsse, verbindungen sind Schwache Art von Schnittstelle.
Nonatomic: diese Art von Eigenschaften verwendet werden, in Bedingungen, wenn wir nicht teilen möchten unsere Steckdose oder Objekt in verschiedenen gleichzeitigen Threads. In anderen Worten, Nonatomic Instanz machen unsere Eigenschaften für den Umgang mit einem thread zu einem Zeitpunkt.
Hoffentlich ist es hilfreich für Sie.
InformationsquelleAutor Joga singh