2012-08-02 29 views
9

benim için Amaç C. .h dosyasındaAmaç C. Garip sözdizimi

Yöntem beyanı bir yöntem bildirmek için bir yol olarak garip bulduk:

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

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

böyle bu yöntemi çağırabilirsiniz

Ve iyi çalışıyor.

Sorunun sözdizimini ne zaman kullanmalıyım. Bu ve her zamanki deklarasyon arasında bir fark var mı?

cevap

6

olduğunu here, bu parametreler opsiyonel: onlar bazı gibiler parametrelerin değişken numara almak

Yöntemleri, da mümkündür ne nadir Ekstra parametreler, metod isminin bitiminden sonra virgül ile ayrılır. (Iki nokta üst üste aksine, virgül adı değil dikkate alınan bir parçasıdır.) Bu örnekte, hayali makeGroup:

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

: yöntem tek bir gerekli parametre (grup) ve isteğe bağlı olan üç parametre geçirilir

Evet, bildirim her zamanki deklarasyondan farklıdır. İsteğe bağlı parametrenin ... olarak bildirildiği bir varargs yönteminden başka, bu tür bir bildirimin düzenli kullanımını bulamıyorum.

1

-(void)methodName:(NSString *)str yourInt:(int) i{...} gibi yöntemleri bildirme amacı daha okunabilir hale getirmektir. llvm 4.0 sonra ilan dizeleri, diziler, sözlükler .. Örneğin diğer C dilleri .. gibi ele alınabilir, beyanların hem aşağıda doğrudur: açıklandığı gibi

//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; 

Kaynak bir Türk forumdan here