objective-c statisch / Klassenmethode Definition - Was ist der Unterschied zwischen "statisch" und "+"?

8

Ich frage mich, ob jemand den Unterschied zwischen den folgenden Funktionen erklären kann. Sie sind beide statisch, erfordern jedoch unterschiedliche Signatur-Syntaxen. Ich frage mich, wie diese zur Laufzeit gehandhabt werden, und warum Sie eine über die andere verwenden würden?

%Vor%

vs.

%Vor%

Danke!

    
bpatrick100 31.01.2011, 14:54
quelle

1 Antwort

11

Anders als in (etwa) C ++, wo statische Memberfunktionen nur gewöhnliche Funktionen im Namespace der Klasse sind, hat Objective-C geeignete Klassenmethoden.

Da Klassen Objekte sind, ähnelt das Aufrufen einer Klassenmethode dem Aufruf einer Instanzmethode für die Klasse. Die wichtigsten Konsequenzen sind:

1) Der Aufruf einer Klassenmethode verursacht einen leichten (wenn auch in der Regel belanglosen) Overhead, da Methodenaufrufe zur Laufzeit aufgelöst werden.

2) Klassenmethoden haben ein implizites "self" -Argument, genau wie Instanzmethoden. In diesem Fall ist 'self' ein Zeiger auf das Klassenobjekt.

3) Klassenmethoden werden von Unterklassen geerbt.

zusammen, 2 und 3 bedeuten, dass Sie solche Dinge mit einer Klassenmethode tun können:

%Vor%

Erstellen Sie dann eine neue Klasse, die die Methode erbt und eine neue Instanz von sich und nicht die Oberklasse zurückgibt.

Ich glaube, dass das Markieren einer normalen c-Funktion static nur für die anderen Dateien als die, in der sie definiert ist, nicht verfügbar ist. Sie würden das im Allgemeinen tun, wenn Sie eine Hilfsfunktion erstellen wollten, die nur für eine Klasse und Sie relevant ist wollte den globalen Namensraum nicht verschmutzen.

    
Chris Devereux 31.01.2011 15:06
quelle