Es gibt zwei neue Speicherverwaltungsattribute für Eigenschaften, die von ARC eingeführt wurden, strongund weak.
Abgesehen davon copy, was offensichtlich etwas völlig anderes ist, gibt es Unterschiede zwischen strongvs retainund weakvs assign?
Nach meinem Verständnis besteht der einzige Unterschied darin, dass der Zeiger weakzugewiesen wird nil, während dies assignnicht der Fall ist. Dies bedeutet, dass das Programm abstürzt, wenn ich eine Nachricht an den Zeiger sende, sobald dieser freigegeben wurde. Aber wenn ich benutze weak, wird dies niemals passieren, da das Senden von Nachrichten an nilnichts bewirkt.
Ich kenne keine Unterschiede zwischen strongund retain.
Gibt es einen Grund, warum ich assignund retainin neuen Projekten verwenden sollte, oder wird die Art von veraltet?
weakund strong) und 4 variable Lebensdauer Qualifizierer ( __strong, __weak, __unsafe_unretained, __autoreleasing). Siehe die ARC-Hinweise unten.
assignbeim Kompilieren mit ARC ein Fehler war. Es gibt viele gelöschte Antworten dazu. Es scheint, dass dies vor der endgültigen Veröffentlichung geändert wurde. unsafe_unretainedist das bevorzugte Attribut für viele von uns Early Adopters. unsafe_unretainedEinen Beweis dafür, dass es sich um ein gültiges Attribut handelt, finden Sie in Apples "Programmieren mit Objective-C" im Abschnitt "Kapselung von Daten" unter der Überschrift "Verwenden Sie unsichere nicht zurückgehaltene Referenzen für einige Klassen". Was besagt: "Für eine Eigenschaft bedeutet dies die Verwendung des Attributs unsafe_unretained:"
strong,weakundunsafe_unretained.