2012-06-24 10 views
15

Ich habe alle diese Fragen ausgecheckt ...Zweck der Instanzmethoden gegen Klassenmethoden in Objective-C

... und Alles, was sie erklären, ist, wie Instanzmethoden für Instanzen einer Klasse verwendet werden und Klassenmethoden mit der Klasse verwendet werden, wenn eine Nachricht an eine Klasse gesendet wird. Das ist hilfreich, aber ich bin neugierig zu wissen, warum würde man eine Klassenmethode vs. eine Instanzmethode verwenden.

+0

möglich duplicate von [Objective-C: Klasse vs Instanzmethoden?] (Http://stackoverflow.com/questions/1053592/objective-c-class-vs-instance-methods) –

Antwort

45

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.

+0

Sie sind zwischen Methodenparameter und verwirrt das Objekt, mit dem die Methode aufgerufen wird (der Empfänger). Ich würde vorschlagen, einige gründliche Objective-C-Tutorials online oder in einem Buch zu betrachten. – UIAdam

+0

Gute Erklärung. Aber ich frage mich, ob es noch daran liegt, seit dem, als ich diesen Beitrag schreibe, ARC schon im Bild. – sooon

+0

Sehr schöne Erklärung ... danke :) – Nav

Verwandte Themen