Meines Wissens unterstützt Objective-C keine Methodenüberladung. Was kann die Alternative dazu in Objective-C sein? Oder sollte ich immer einen anderen Methodennamen verwenden?
ios
objective-c
overloading
suse
quelle
quelle
Es kann erwähnenswert sein, dass Clang + LLVM , selbst wenn Objective-C das Überladen von Methoden nicht unterstützt , das Überladen von Funktionen für C unterstützt. Obwohl dies nicht ganz das ist, wonach Sie suchen, kann es sich in einigen Situationen als nützlich erweisen (z. B. wenn Implementierung einer leicht gehackten (gegen die Kapselung gerichteten) Version des Besucherdesignmusters )
Hier ist ein einfaches Beispiel für die Funktionsüberladung:
quelle
id
undisKindOfClass:
zur Verfügung stehen müsste , ist eine andere Geschichte ...id
undisKindOfClass:
decke die meisten praktischen Szenarien ab. Ein Grund, warum Sie möglicherweise eine Überladung bevorzugen, ist die automatische Auswahl des speziellsten Typs, für den ein geringer Aufwand für die explizite Typprüfung anfällt.David hat Recht, dass das Überladen von Methoden in Objective-C nicht unterstützt wird. In diesem Sinne ähnelt es PHP. Wie er auch betont, ist es üblich, zwei oder mehr Methoden mit unterschiedlichen Signaturen in der von ihm beispielhaften Weise zu definieren. Es ist jedoch auch möglich, eine Methode mit dem Typ "id" zu erstellen. Über den Typ "id" können Sie jedes Objekt (und alle Grundelemente mit der NSNumber-Klasse) an die Methode senden. Anschließend können Sie innerhalb der Methode selbst den Typ testen und bei Bedarf die entsprechende Ausnahme auslösen. Dies hat zwar nur einen geringen Leistungseinbruch, ist jedoch höchstwahrscheinlich nominal oder unbedeutend, es sei denn, Sie verarbeiten große Datenmengen.
Dies ist auch ein schöner Ort, um ein Protokoll zur Durchsetzung des Objekttyps zu implementieren. Dies kann folgendermaßen geschehen:
quelle