2016-05-25 3 views

Antwort

1

Starke und schwache Hilfe bei Retain-Release-Zyklen (RRC), eine Form von Speicherverlust. iOS verwendet ein so genanntes Automatic Reference Countin (ARC), um zu wissen, wann ein Objekt verwendet wird und im Speicher verbleiben soll oder nicht mehr verwendet wird und gelöscht werden sollte, um Ressourcen zurückzugewinnen. ARC funktioniert, weil die Laufzeitumgebung für jedes Objekt weiß, wie viele Objekte darauf verweisen. Wenn dieser Wert 0 erreicht, wird das Objekt gelöscht.

Probleme treten auf, wenn Sie zwei Objekte haben, die Referenzen zueinander enthalten. Da Objekt A eine Referenz auf Objekt B und B auf A enthält, ist die Referenzzahl für A und B niemals 0, sondern A und B sind immer im Speicher. Es ist auch möglich, dass keine anderen Objekte Verweise auf A oder B enthalten. Daher haben wir gerade ein Speicherleck erstellt.

Zurück zu Stark und Schwach werden diese Schlüsselwörter verwendet, um "Eigentum" zu bezeichnen, wenn Sie so wollen. Sie helfen Ihnen dabei, Retain-Release-Zyklen zu eliminieren, indem Sie einschränken, welche Objekte die Referenzzahl für ein anderes Objekt erhöhen. Eine starke Eigenschaft ist eine, in der Sie die Referenzzahl des Objekts erhöhen. Wenn Objekt A einen starken Bezug zu B hat und kein anderes Objekt auf B verweist, hat B den Zählwert 1 (A besitzt oder muss existieren). Wenn B nun einen Bezug zu A haben möchte, möchten wir eine schwache Referenz verwenden. Schwache Referenzen erhöhen die Referenzzahl des Objekts nicht. Wenn in diesem speziellen Fall A keine anderen Objekte hat, die auf B verweisen, wäre die Zählung von A 0, wenn B schwach ist.

Können Sie sehen, wie dies die RRC eliminiert? Unter der Annahme, dass keine externen Referenzen vorhanden sind und keine starken/schwachen Referenzen verwendet werden, würden sich A und B ständig im Speicher befinden. Unter Verwendung der starken und schwachen Referenzen, die wir oben beschrieben haben, würde A den Wert 0 haben, so dass es aus dem Speicher entfernt würde. Dies wiederum würde den Referenzzähler von B von 1 auf 0 verringern, was dazu führt, dass B aus dem Speicher entfernt wird.

Nichtatomisch wird verwendet, um anzuzeigen, dass das Objekt, auf das verwiesen wird, nicht threadsicher ist. Dies bedeutet, dass das Objekt nicht in der Lage ist, mehrere Anfragen gleichzeitig zu bearbeiten. Atomarität ist die Idee, dass, sobald Sie eine Anfrage stellen, entweder passiert oder nicht. Wenn eine Operation atomar ist, garantieren Sie, dass die Entität, auf die Sie die Operation anwenden, sich nie in einem Zwischenstatus befindet. Unabhängig davon, wie Sie diese Entität betrachten, sieht sie entweder so aus, wie sie vor der Anforderung der Operation ausgeführt wurde, oder sie sieht so aus, wie sie einmal ausgeführt wurde. (Wenn Sie über Atomizität nachdenken, denken Sie an Atome. Das Wort bedeutet unteilbar. Atomare Operationen sind solche, die nicht in kleinere Operationen unterteilt werden können.)

+0

Ich habe nicht gefunden, in der Antwort zu behalten – Rishi