2009-04-13 74 views

回答

1

這是正確的,但它是一個簡單的錯字。您應該始終檢查文檔以確保任何方法的簽名以避免任何運行時錯誤。

與簽名的方法:

- (void)refresh 

將被使用,如:

[myObject refresh]; 

與簽名的方法:

- (void)refreshView:(UIView *)view 

將被使用,如:

[myObject refreshView:view]; 

最後,與簽名的方法:

- (void)refreshView:(UIView *)view updateLabels:(BOOL)update 

將被使用,如:

[myObject refreshView:view updateLabels:YES]; 
+0

謝謝。但是有意義的是,有人會寫文檔文本「refreshView:」而不是「refreshView:view」或者只是「refreshView」? – Thanks 2009-04-13 13:20:11

+0

如果只有一種方法出現,它會。例如,如果一個API具有上述所有三種方法,那麼作者應該非常小心地指定他的確切含義。但是,如果只有一個refreshView方法,並且沒有其他人使用參數,則通常是可以接受的。 – 2009-04-13 16:16:32

0

目標C refreshView:refreshView兩種不同的方法。第一個參數需要一個參數,另一個參數不需要參數。正如你所說。

這很重要,因爲那是方法的全名,並且您需要能夠在傳遞選擇器時正確寫入。

例如示出的片材時:

- (void)beginSheet:(NSWindow *)sheet 
    modalForWindow:(NSWindow *)docWindow 
    modalDelegate:(id)modalDelegate 
    didEndSelector:(SEL)didEndSelector 
    contextInfo:(void *)contextInfo; 

的didEndSelector通常的形式是:

- (void)sheetDidEnd:(NSWindow *)sheet 
    returnCode:(int)returnCode 
    contextInfo:(void *)contextInfo; 

等在beginSheet方法這將需要被傳遞到didEndSelector參數作爲:

@selector(sheetDidEnd:returnCode:contextInfo:); 

獲取錯誤的選擇簽名將導致m深夜在調試時頭部劃傷。

+0

幾乎看起來像是如果在objective-c中的方法實際上沒有方法名稱,bot只包含參數名稱(如果它有參數的話)。如果它沒有,那麼它有一個方法名稱。這是一個有效的陳述? – Thanks 2009-04-13 18:37:45

1

你說得對,尾部的冒號表示單個參數,在代碼中使用完整的包含冒號名字很重要 - 例如, @selector(drawRect:)

然而,雖然我無法在散文中找到一個例子,但我相信你偶爾會看到寫有沒有尾隨冒號的方法,只是爲了讓它看起來更好。我知道我在寫評論/文檔時會這樣做 - 例如「子類應該自定義doFoo方法」,當我的意思是doFoo:。因此,如果您看到散文中的方法名稱,那麼檢查頭文件或類參考文檔以獲取正確的簽名可能是一個好主意。

相關問題