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% 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.
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.
Tags und Links objective-c ios