2012-08-02 19 views
9

znalazłem dziwne jak dla mnie sposób deklarowania metody w Objective Cskładnia Weird Objective C.

deklaracji metody w pliku .h:

-(void)methodName:(NSString *)str, int i; 

realizacji metody w .m pliku:

-(void)methodName:(NSString *)str, int i 
{ 
    NSLog(@"str = %@, int = %d", str, i); 
} 

mogę wywołać tę metodę tak:

[self methodName:@"stringExample", 99]; 

Wszystko będzie dobrze.

Moje pytanie brzmi, kiedy powinienem użyć takiej składni. Czy jest jakaś różnica między tym a zwykłą deklaracją?

Odpowiedz

6

Jak opisano here te parametry są opcjonalnie:

Metody, które mają zmienną liczbę parametrów są również możliwe, chociaż są pewne co rzadkie. Dodatkowe parametry są oddzielone przecinkami po zakończeniu nazwy metody. (W przeciwieństwie średnikami, przecinki nie uważane za część nazwy). W poniższym przykładzie, urojony makeGroup: Metoda przepuszcza wymagany jeden parametr (grupy) i trzy parametry, które są opcjonalnie:

[receiver makeGroup:group, memberOne, memberTwo, memberThree];

Tak, więc deklaracja różni się od zwykłej deklaracji. Nie można znaleźć żadnego regularnego użycia tego typu deklaracji poza metodą varargs, gdzie opcjonalny parametr jest zadeklarowany jako ....

1

Celem deklarowania metod takich jak: -(void)methodName:(NSString *)str yourInt:(int) i{...} jest uczynienie go bardziej czytelnym. Po llvm 4.0 deklarujące ciągi, tablice, słowniki .. może być traktowane jak inne języki C .. Na przykład, zarówno deklaracji poniżej są prawdziwe:

//old style 
array = [nsarray arraywithobjects:a, b, c, nil]; 
dict = [nsdictionary dictionarywithobjects:@[o1, o2, o3] 
forkeys:@[k1, k2, k3]]; 
number = [nsnumber numberwithchar:'x']; 
number = [nsnumber numberwithint:12345]; 
//new style 
array = @[ a, b, c ]; 
dict = @{ k1 : o1, k2 : o2, k3 : o3 }; 
number = @'x'; 
number = @12345; 

zasobów z tureckiego forum jest here