mit ARC, lebenslange Qualifier zuweisen und unsafe_unreadyed

8

Ich bin etwas verwirrt über diese beiden Qualifikanten ... Mit ARC anstelle von weak (d. H. Wenn ich Unterstützung für iOS 4 benötige) kann ich unsafe_unretained verwenden, um die Auto-Nil-Funktionen zu verlieren ... das Endergebnis scheint ähnlich zu assign zu sein.

  • Kann ich unsafe_unretained mit assign austauschen?
  • Sind diese Qualifier dasselbe?

Es wäre wirklich interessant, einen Link von Apple-Dokumentation zu diesem Argument ... Ich kann nur ein paar Zeilen finden hier

    
MatterGoal 06.12.2011, 09:14
quelle

1 Antwort

16

Clangs technische Spezifikation von ARC geht viel detaillierter auf die Funktionsweise der Qualifier ein.

Aber, um Ihre Frage zu beantworten: assign und __unsafe_unretained sind nicht dasselbe. assign ist ein Eigenschaftsattribut, das dem Compiler mitteilt, wie die Setter-Implementierung der Eigenschaft zu synthetisieren ist, während __unsafe_unretained ein Besitzqualifizierer ist, das ARC mitteilt, wie retain / release -Aufrufe eingefügt werden. Aber sie sind verwandt: wenn eine Eigenschaft deklariert wird, bedeutet assign __unsafe_unretained ownership.

Vor der ARC war assign das Standardeigentumsqualifikationsmerkmal; Bei aktivierter ARC lautet der Standardwert für beibehaltene Objektzeigertypen strong . (Für Skalare und andere Zeigertypen ist assign immer noch der Standardwert.)

    
一二三 06.12.2011, 10:07
quelle