Es gibt zwei neue Speicherverwaltungsattribute für Eigenschaften, die von ARC eingeführt wurden, strong
und weak
.
Abgesehen davon copy
, was offensichtlich etwas völlig anderes ist, gibt es Unterschiede zwischen strong
vs retain
und weak
vs assign
?
Nach meinem Verständnis besteht der einzige Unterschied darin, dass der Zeiger weak
zugewiesen wird nil
, während dies assign
nicht 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 nil
nichts bewirkt.
Ich kenne keine Unterschiede zwischen strong
und retain
.
Gibt es einen Grund, warum ich assign
und retain
in neuen Projekten verwenden sollte, oder wird die Art von veraltet?
weak
und strong
) und 4 variable Lebensdauer Qualifizierer ( __strong
, __weak
, __unsafe_unretained
, __autoreleasing
). Siehe die ARC-Hinweise unten.
assign
beim 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_unretained
ist das bevorzugte Attribut für viele von uns Early Adopters. unsafe_unretained
Einen 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
,weak
undunsafe_unretained
.