2012-10-01 8 views
6

Ich war überrascht, wenn die folgende Methodendefinition kompiliert (mit einem Apple LLVM 4.1):Objective-C-Methode Syntax

- (void) testMethod:someArgument { 

} 

Beachten Sie die Art von someArgument fehlt. Was ist die Regel in Objective-C zum Angeben der Typen von Methodenargumenten?

Antwort

7

Der Standardargumenttyp ist id. Auch wird diese kompilieren:

- testMethod:someArgument { 
} 

Dies ist eine Methode, die eine id als Argument und sollte eine id zurück.

Eigentlich nicht einmal den Namen der Methode notwendig:

- :someArgument { 
} 

Dies bezeichnet werden kann als:

[self :someObject]; 

Natürlich all dies sehr schlechte Praxis und sollten Sie immer angeben, die Typen (und die Namen).

+0

Interessant! Ich mag Objective-C noch mehr wissen '-: v {}' kompiliert :-) – SundayMonday

+2

Ich weigere mich, Fragen zu beantworten, die Methoden wie diese verwenden :-D – DrummerB

+1

Und wenn Sie nach der kürzesten Methode suchen, die kompiliert, ist es wahrscheinlich '-a {}' ;-) – DrummerB

2

Der "Typ" im Argument Methode wird für die Typüberprüfung sowohl vom Compiler als auch für die Laufzeitübermittlung verwendet.

So wie es in Ihrem Prototyp aufgerufen wird, entspricht es einem "(id)".

Weitere Informationen finden Sie im Abschnitt "Methoden können Parameter übernehmen" von Apple Programming with Objective C document. Ich sehe auch einige sehr hilfreiche Informationen im Abschnitt "Object Messaging" von "The Objective-C Programming Language" document.

1

Die Objective-C Programming Languagetells us:

Für die objektorientierte Konstrukte von Objective-C, wie beispielsweise Verfahren Rückgabewerte ersetzt ID int als Standarddatentyp (Für streng C-Konstrukte, wie zum Beispiel Funktionsrückgabewerte, bleibt int der Standardtyp .)