Lernziel und Swift im Moment. Ich verstehe Initialisierer in Obj C und Convenience Initialisierer und ich verstehe Factory-Methoden. Ich habe auch den Begriff "Konstrukteure" gehört, aber ich bin nicht sicher, wie sie sich von Fabrikmethoden oder Initialisierern unterscheiden. Ist "Konstruktor" nur eine andere Möglichkeit, auf Initialisierer Bezug zu nehmen? dankeUnterschied zwischen Fabrik Methoden und Konstruktoren
Antwort
Es gibt keinen Unterschied.
Klassenmethoden, die Instanzobjekte erstellen, wurden lange als Convenience Allokatoren oder - selten - als Konstruktoren bezeichnet. Der Begriff Convenience Allokatoren wurde oft verwendet, wenn ein Instanzobjekt automatisch freigegeben wurde, was mit ARC unwichtig wurde.
NSString *string1 = [NSString string]; // autoreleased
NSString *string2 = [NSSString new]; // ownership transfer
Grundsätzlich sind sie eine Kombination aus +alloc
und -init…
plus - wenn es sich um eine Bequemlichkeit Allocator ist - -autorelease
. Vor zwei (?) Jahren begannen sie, sie als Faktormethoden zu bezeichnen.
Allerdings Namen vergessen. Denken Sie darüber nach, was sie tun und warum sie existieren: Mit einer klassischen +alloc
- -init…
Kombination hatte die Klasse keine Möglichkeit zu entscheiden, welcher Subtyp erstellt werden soll, denn das hängt von den Argumenten -init
ab. Nehmen wir ein Beispiel: NSSArray
hat zwei (private) Unterklassen _NSSmallArray
und _NSBigArray
. Er möchte den Subtyp aus der geschätzten Größe auswählen, die Sie als Kapazität auf einer -initWithEstimatedSize:
-Methode angeben. Wie kann +alloc
entscheiden, welcher Subtyp ausgewählt und zugeordnet wird? Es hat keine Ahnung, welches Argument Sie der init Methode übergeben werden.
Mit Konstruktoren oder Komfortzuweisern kann die Objektzuordnung parametrisiert werden. +newArrayWithEstimatedSize:
oder +arrayWithEstimatedSize:
kann dieses Problem lösen.
Eh, jetzt müssen Sie sie Fabrikmethoden nennen. Es tut uns leid. Die Geschichte ist die gleiche.
Dies ist getaggt mit [swift], nicht wirklich klar, ob OP tatsächlich nach Swift-Informationen gesucht hat, aber vielleicht sollte erwähnt werden, dass Swift den Begriff "convenience _initializer_" formalisiert hat (https://developer.apple.com/library /prelelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-ID216) und "Initialisierer" in Swift decken die Funktionalität ab, für die "Konstruktoren" in ObjC verwendet werden . –
Es ist mit Swift und Objective-C markiert. Da das Konzept in Swift von Objective-C abgeleitet ist, können Sie es mit Objective-C beschreiben. Der Rest ist wie in den letzten drei Absätzen erwähnt. –