[FIXED] Äquivalent zum statischen Konstruktor in Objective-C?

Ausgabe

Ich bin neu in Objective C und konnte nicht herausfinden, ob es das Äquivalent eines statischen Konstruktors in der Sprache gibt, dh eine statische Methode in einer Klasse, die automatisch vor der ersten Instanz einer solchen Klasse aufgerufen wird wird instanziiert. Oder muss ich den Initialisierungscode selbst aufrufen?

Vielen Dank

Lösung

Die +initializeMethode wird automatisch aufgerufen, wenn eine Klasse zum ersten Mal verwendet wird, bevor Klassenmethoden verwendet oder Instanzen erstellt werden. Du solltest dich niemals selbst anrufen +initialize.

Ich wollte auch einen Leckerbissen weitergeben, den ich gelernt habe und der Sie auf der Straße beißen kann: +initializewird von Unterklassen geerbt und wird auch für jede Unterklasse aufgerufen, die keine +initializeeigene implementiert . Dies kann besonders problematisch sein, wenn Sie die Singleton-Initialisierung in naiv implementieren +initialize. Die Lösung besteht darin, den Typ der Klassenvariablen wie folgt zu überprüfen:

+ (void) initialize {
  if (self == [MyParentClass class]) {
    // Once-only initializion
  }
  // Initialization for this class and any subclasses
}

Alle Klassen, die von NSObject abstammen, haben sowohl +classals auch -classMethoden, die das ClassObjekt zurückgeben. Da es für jede Klasse nur ein Klassenobjekt gibt, wollen wir die Gleichheit mit dem ==Operator testen. Sie können dies verwenden, um zu filtern, was nur einmal passieren soll, im Gegensatz zu einmal für jede einzelne Klasse in einer Hierarchie (die möglicherweise noch nicht existiert) unterhalb einer bestimmten Klasse.

Bei einem nebensächlichen Thema lohnt es sich, sich mit den folgenden verwandten Methoden vertraut zu machen, falls Sie dies noch nicht getan haben:


Bearbeiten: Schauen Sie sich diesen Beitrag von @bbum an , der mehr über Folgendes erklärt +initialize: https://web.archive.org/web/20201108095221/http://www.friday.com/bbum/2009/09/06/iniailize-can- mehrfach-ausgeführt-werden-nicht-so-viel-laden/

Außerdem hat Mike Ash ein schönes, detailliertes Freitags-Q&A über die Methoden
+initializeund geschrieben: https://www.mikeash.com/pyblog/friday-qa-2009-05-22-objective-c-class-loading-and-initialization.html+load


Beantwortet von –
Quinn Taylor


Antwort geprüft von –
Robin (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like