標籤:
Objective-C 方法重載 - Selector 標識起決定作用
太陽火神的美麗人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商業用途-保持一致”創作公用協議
轉載請保留此句:太陽火神的美麗人生 - 本部落格專註於 敏捷開發及移動和物聯裝置研究:iOS、Android、Html5、Arduino、pcDuino,否則,出自本部落格的文章拒絕轉載或再轉載,謝謝合作。
重載方法聲明:
- (void)test;- (void)test:(NSString *)command;- (NSString *)test:(NSString *)command param:(NSString *)param;- (NSString *)test:(NSString *)command param:(NSString *)param result:(NSString *)result;- (NSString *)test:(NSString *)command result:(NSString *)result param:(NSString *)param;- (NSString *)test:(NSString *)command :(NSString *)result :(NSString *)param;- (NSString *)test:(NSString *)command param:(NSString *)param callback:(NSString *)callback;
以上每個方法的實現中,都加入這一句,用於列印當前方法的簽名:
NSLog(@"%@", NSStringFromSelector(_cmd));
按如下順序調用以上各方法:
[interface test]; [interface test:@"command"]; [interface test:@"command" param:@"param"]; [interface test:@"command" param:@"param" result:@"result"]; [interface test:@"command" result:@"result" param:@"param"]; [interface test:@"command" :@"result" :@"param"]; [interface test:@"command" param:@"param" callback:@"callback"];
輸出結果如下:
2015-02-28 12:14:02.724 TestWebView[1490:371780] test2015-02-28 12:14:02.724 TestWebView[1490:371780] test:2015-02-28 12:14:02.724 TestWebView[1490:371780] test:param:2015-02-28 12:14:02.724 TestWebView[1490:371780] test:param:result:2015-02-28 12:14:02.725 TestWebView[1490:371780] test:result:param:2015-02-28 12:14:02.725 TestWebView[1490:371780] test:::2015-02-28 12:14:02.725 TestWebView[1490:371780] test:param:callback:
由 XCode 的錯誤提示可知,資料類型不能用於區分重載方法:
由 XCode 的錯誤提示可知,冒號前的參數名是用於區分方法簽名的依據,形參名和資料類型一樣,並不起作用,這源於 selector 的構成要素是冒前前的部分:
由此可以總結:
1、參數個數決定了方法的簽名;
2、相同參數個數的方法,參數名用於區分重載
3、資料類型和形參名不能用於區分方法
4、selector 的構成要素決定了,冒號前的部分所構成的方法簽名用於區分方法
Objective-C 方法重載 - Selector 標識起決定作用