Objective-C 方法重载 - Selector 标识起决定作用

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] test
2015-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 标识起决定作用)