2013-01-18 34 views
1

我知道Objective-C不支持重載方法。但是,如何理解以下與'tableView'同名的委託方法?對我來說,這些方法似乎是超載的,但我不確定。Objective-C不支持重載方法Objective-C

對於一個視圖控制器來表明它是一個UITableView委託,它必須實現UITableViewDelegate協議。在視圖控制器實現以下是常見的委託方法:

tableView:heightForRowAtIndexPath: 
tableView:willDisplayCell:forRowAtIndexPath: 
tableView:didSelectRowAtIndexPath: 
tableView:didDeselectRowAtIndexPath: 
tableView:commitEditingStyle:forRowAtIndexPath: 
tableView:canEditRowAtIndexPath: 
+5

這些都是不同的。整個字符串,包括':'和其後的所有內容都是方法/選擇器名稱的一部分。 –

回答

7

所有你列出不同的方法,因爲選擇的名字包括了所有的零件,而不僅僅是部分到第一個冒號「:」。

以下是在目標C試圖方法重載(編譯器將拒絕)的一個例子:

- addSomething:(NSObject *) toView:(UIView *)view 
- addSomething:(UIView *) toView:(UIView *)view // won't work 

注意,你被允許「過載」的方法時,有一個類方法和一個實例方法變異與同名

- addSomething:(NSObject *) toView:(UIView *)view 
+ addSomething:(NSObject *) toView:(UIView *)view // this is OK 

顯然,你會想要一個相當不錯的REAS在做這樣的事情可能會造成混淆!

也看到這個問題:

Class method and instance method with the same name in Objective-C

+0

謝謝你的幫助。 – user1219702

+0

謝謝你接受我的答案。點擊答案左邊的勾號,它應該變綠。 – occulus