Richtiger Weg zum Initialisieren eines UIView mit .xib und der Backing-Klasse

8

Ich habe einige benutzerdefiniert erstellte UIViews, die .xib-Dateien für das Layout und unterstützende Klassen für die zusätzliche Einrichtung verwenden. Ich erstelle diese Klassen mit alloc / init und rufe loadNibNamed in meiner benutzerdefinierten init-Methode auf, was aber Speicherlecks verursacht. Jemand hat darauf hingewiesen, dass der Alloc-Abschnitt tatsächlich ein selbstleckendes Objekt erzeugt hat, so dass ich meine Init-Methode an diese angepasst habe:

%Vor%

Aber jetzt, wenn ich Analysecode ausführe, erhalte ich die Warnung "Selbst 'zurückgeben', während er nicht auf das Ergebnis von '[(super oder self) init ...]' gesetzt ist". Also meine Frage ist, was ist der richtige Weg für benutzerdefinierte UIViews mit einer Backing-Klasse?

Da es gefragt wurde, habe ich diesen obigen Code wie folgt verwendet:

%Vor%     
Rob Booth 16.08.2012, 18:29
quelle

2 Antworten

17

Erhalte die Ansicht von - [NSBundle loadNibNamed:owner:options:], und setze den Rahmen so, dass er den Grenzen deiner Ansicht entspricht. Im Allgemeinen sollten Sie auch die Größe der Ansicht in der Feder ändern, wenn die Größe der übergeordneten Ansicht geändert wird.

Wir haben eine UIView-Kategorie mit diesen Zusätzen:

%Vor%

Dann sieht unsere -initWithFrame: -Methode folgendermaßen aus:

%Vor%

Stellen Sie nur sicher, dass die Schreibfeder denselben Namen wie die Klasse hat, damit dies funktioniert.

    
Dave Batton 17.08.2012 00:20
quelle
6

Würden Sie den Convenience-Konstruktor-Stil verwenden?

%Vor%

Es gibt Ihnen die Flexibilität, die Sie benötigen, um Ihre Ansicht zu konstruieren, führt aber nicht zu einem Speicherverlust oder Warnungen.

    
Jeffery Thomas 17.08.2012 00:22
quelle

Tags und Links