【发布时间】:2014-11-05 08:17:27
【问题描述】:
我试图理解,Objective-C 中的方法签名是什么样子的。
简介:
首先,让我们打破对问题的误解,它是什么,方法签名? 方法签名是帮助编译器明确识别子程序的东西。 我对吗? :)
所以在C语言中签名大致等价于它的原型定义:
例如,我们在 stdlib 中有函数 int printf( const char *format, ... );。
这个函数的签名是printf。
在这种情况下,我们不能在 C 语言中重载,因为编译器无法识别具有不同参数类型的函数,所以人们决定做一些棘手的事情:
long int labs (long int n);
int abs (int n);
double fabs (double x);
在 C++ 语言中,方法签名是类名、方法名和方法参数。 所以在这种语言中我们可以重载方法。
问题
我无法得到简单的答案,Objective-C 中的方法签名是什么?! 我正在尝试使用我的逻辑...
1)首先,我们不能在 Objective-C 中重载 => 方法参数不是方法签名的一部分。
2)我尝试编译不同返回值的代码:
@interface Foo : NSObject
- (CGFloat)method;
- (NSInteger)method;
@end
在这种情况下我得到了错误 => 返回值不是方法签名的一部分。
我测试了不同的案例并得到了答案,Objective-C 中的方法签名是类名、方法类型('+' 或'-')和选择器。 例如,我们在 Foo 类中有方法(代码如下):
@interface Foo : NSObject
+ (void)methodWithArgument:(NSInteger)argument;
@end
所以这个方法的签名是+[Foo methodWithArgument:]
然后,我查看了苹果的 NSMethodSignature (http://bit.ly/1tGR8zt) 文档
NSMethodSignature 对象记录参数的类型信息 以及方法的返回值
参数和返回值?!只有使用参数和返回值,我们才能明确识别方法?很奇怪。
【问题讨论】:
标签: ios objective-c method-signature