2013-07-25 91 views
0

如果我們在任何委託方法中編寫代碼。它會是某種方法重載?代表覆蓋

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
    { 
    switch (alertView.tag) 
    { 
    case 1000: 
     if (buttonIndex == 0) 
     { 
      [self revealOneLetter]; 
     } 
     break; 
    case 2000: 
     if (buttonIndex == 0) 
     { 
      [self removeSomeLetters]; 
     } 
     break; 
    case 5000: 
     [self backBtnAction:nil]; 
     break; 
    case 3000: 
     if (buttonIndex == 1) 
     { 
      [self buyBtnAction:nil]; 
     } 
     break; 
    } 

    } 

在上面的代碼中,我們調用委託方法中的一些方法,所以基本上我們覆蓋了委託。 這個東西的確切名稱是什麼。

+0

對不起,你的問題不清楚。但AFAIK這是不是方法重載或重寫... – booleanBoy

+0

我同意@booleanBoy,這只是'UIAlertView'委託內的正常函數調用。 – Hemang

回答

2

你不是首要(或覆蓋超載,這兩者都是不同的)東西,你是實現的委託方法。也就是說,您正在添加一個可以由委託對象調用的方法。效果可能類似於在子類中重寫方法:在這兩種情況下,您都在修改對象的行爲,但關係不同。 代表模式提供專業化沒有子類化。例如,在應用商店中四分之三的bazillion應用程序中,幾乎所有應用程序都使用相同的UIApplication對象 - 沒有人使用UIApplication,因爲您可以使用應用程序委託對它進行專門化。

1

你正在實現協議的方法(UIAlertViewDelegate協議),而不是重載(我認爲你的意思是覆蓋)。

在Objective-C:

  • 重載:具有相同的方法名稱,但不同的參數不存在(像它在Java那樣例如)
  • 重寫:是動作修改子類中的方法以適應子環境中的父級行爲

你在這裏做的是告訴UIAlertView實例如何行爲當某個事件發生時(按鈕被點擊)

1

你不覆蓋任何東西。你是執行委託協議。

覆蓋意味着在子類中重新實現超類的方法。 F.E.所有那些UIViewController方法如viewDidLoad,當您創建自己的viewcontroller子類並編寫viewDidLoad方法時,您是覆蓋viewDidLoad方法的UIViewController

+0

這是「騎* *」,而不是「寫」。 –

1

這既不是覆蓋也不是超載,絕對不是。實際上你的班級(說viewController)符合或採用協議(你的情況UIAlertViewDelegate)。並在的目標-c中協議是方法聲明的列表。如果你的班級採用或符合協議,那麼你必須在你的班級中實施這些方法。在協議需要需要執行兩種方法,如果您符合該協議,而其他方法是可選,則可以通過名稱來確定是否由開發者決定是否要實現這些方法。

因此,在您的情況下,您的相應類符合/採用了協議,即UIAlertViewDelegate,這就是爲什麼您正在實施以下方法,通知您按下了UIAlertView中的哪個按鈕。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex