Warum gibt es keine Notwendigkeit, ein Outlet für die Freigabe, die mit „zuweisen“ eingerichtet wird?

StackOverflow https://stackoverflow.com/questions/805892

Frage

Ich habe gelesen, dass, wenn ich so etwas wie folgt aus:

@property (nonatomic, assign) UIView *anView;

Dann muss ich nicht über Speicherverwaltung kümmern. Ich habe nicht zu tun haben [anView release] im -dealloc Verfahren.

Warum?

„assign“ sagt nur den Compiler: „Hey Mann, diese Eigenschaft nicht behalten, was jemand zu ihm zuweist“. Und dann können Sie tun

@synchronize anView;

und der Compiler zaubert einen Getter und Setter, wo die Setter einfach so aussehen:

- (UIView*) anView {
    return anView;
}

und der Setter kann wie folgt aussehen:

- (void) setAnView:(UIView*)newAnView {
    anView = newAnView;
}

richtig / falsch? Wenn das richtig war, behauptet, die Setter kein Eigentum an dem newAnView variabel, da es keine „behalten“ Eigenschaft. Es dauert es nur und ordnet sich die Instanzvariable. Also, wenn die Eigentümerpolitik unter Berücksichtigung, gibt es keine Notwendigkeit für die anView Instanzvariable in den -dealloc freigibt. Das Objekt nicht besitzt es nicht. Ist das richtig?

War es hilfreich?

Lösung

Ja, sie ist im Grunde richtig. Nehmen wir an, dass der Garbage Collector ausgeschaltet ist (sonst ist es egal, sowieso).

Wenn ‚assign‘ Eigenschaften verwenden, müssen Sie das Objekt nicht freigeben, weil Sie nie erhalten (es jemand anderes die Verantwortung).

Im Wesentlichen schafft dies eine schwache Referenz - anView freigegeben werden kann, während die Eigenschaft noch auf sie zeigt. Normalerweise würden Sie verwenden ‚zuweisen‘ für primitive Datentypen, nicht für Objekte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top