Im Allgemeinen sollten Sie Instanzmethoden erstellen, wenn Sie Code benötigen, der für eine bestimmte Instanz eines Objekts gilt. Sie erstellen eine Klassenmethode, wenn Sie etwas tun müssen, das diese Klasse im Allgemeinen betrifft, aber wahrscheinlich nicht mit bestimmten Objekten dieser Klasse arbeitet.
In der Praxis werden Sie feststellen, dass fast alle Ihre Methoden Instanzmethoden sein sollten. Werfen Sie einen Blick auf eine vorhandene Objective-C-Klasse wie NSString
, NSArray
, UIView
usw. und Sie werden sehen, dass die überwiegende Mehrheit ihrer Methoden Instanzmethoden sind. Die gebräuchlichste Verwendung von Klassenmethoden (siehe auch die Klassen, die ich erwähnt habe) sind für Convenience-Konstruktoren, die autorelease
Objekte oder Singleton-Accessoren zurückgeben.
Betrachten Sie die length
Methode in NSString
. Warum ist das eine Instanzmethode und keine Klassenmethode? Es ist eine Instanzmethode, weil es nur Sinn macht, eine bestimmte Instanz von NSString
nach ihrer Länge zu fragen. Eine allgemeine Frage nach einer Länge (d. H. Wenn die Länge eine Klassenmethode ist) würde keinen Sinn ergeben.
Auf der anderen Seite sagen wir, dass wir eine Methode zu NSNumber
hinzufügen möchten, die den maximalen ganzzahligen Wert zurückgibt, der auf einem bestimmten System gespeichert werden kann. In diesem Fall sollte es eine Klassenmethode sein, weil wir nur eine allgemeine Frage von NSNumber
stellen, die unabhängig von einer bestimmten Instanz ist.
möglich duplicate von [Objective-C: Klasse vs Instanzmethoden?] (Http://stackoverflow.com/questions/1053592/objective-c-class-vs-instance-methods) –