Frage

Foo *oFoo = [[[Foo alloc] init] autorelease];

Dies ist, wie ich zu Programm in Objective C gelehrt wurde, aber der Clang Fehlerprüfer beklagt, dass der Anfangswert nie gelesen. Aber oFoo ist ein Objekt mit Eigenschaften. oFoo selbst hat keinen einzigen Wert. Die Eigenschaftswerte sind, was Sache.

oFoo.PropertyA = 1;
oFoo.PropertyB = @"Hello, World."

Soll ich das einfach ignorieren? Ist das wert Fixierung? Was ist die Lösung, zu sehen, dass „Anfangswert“ in meinem Zusammenhang bedeutungslos ist?

War es hilfreich?

Lösung

In der Regel bedeutet das:

  1. Sie haben eine Variable erstellt.
  2. Sie haben einen gewissen Wert einer Variablen zugewiesen. Spielt keine Rolle, an sich selbst oder an seinen Eigenschaften.
  3. Sie haben "neu" diesen Wert oder Fertigblock (Methode / for-each / etc.).

Für eine einfache Art:

int a;
a = 2;
a = 3;

Erster Wert (2) nie verwendet. Ähnliches kann mit Objekten, zum Beispiel geschehen:

Foo *oFoo = [[[Foo alloc] init] autorelease];

oFoo.PropertyA = 1;
oFoo.PropertyB = @"Hello, World."

oFoo = [[[Foo alloc] init] autorelease];

Hier erster alloc-init-Block erstellt einen Wert, der durch die zweiten alloc-init außer Kraft gesetzt wurde. Und Fehler sagt so etwas.

Statt zweiten alloc-init-Block kann ich Methode Implementierung schließen, das ähnlich sein wird.

Andere Tipps

Ich denke, Alexander Babaev recht. Hier eigentliche Code:

Part *oPart = [[[Part alloc] init] autorelease];
iParts = aParts.count;
for (iPart=0;iPart<iParts;iPart++) {
    oPart = [aParts objectAtIndex:iPart];

APART ist ein Array von Teil-Objekten. Vielleicht sollte ich die erste Zeile beseitigen und die letzte Zeile sollte wie folgt aussehen:

Part *oPart = [aParts objectAtIndex:iPart];

Wenn ich das tun, ich habe nicht explizit OpArt am Ende der Schleife zu lösen. Durch die Deklaration OpArt, bevor die Schleife beginnt, ich versuche, effizient zu sein und nur das OpArt Objekt wiederverwenden, anstatt erstellen / Freigabe jedes Mal durch die Schleife.

Wer weiß, was der bessere Ansatz ist?

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