Я пытаюсь понять, как выглядит подпись метода в Objective-C.Подпись метода в Objective-C
INTRO:
Во-первых, позволяет разорвать недопонимание вопрос, что это, метод подписи? Подпись метода - это нечто, что помогает компилятору однозначно идентифицировать подпрограмму. Я прав? :)
Так на языке C подписи примерно соответствует его определению прототипа: Например, мы имеем функцию int printf(const char *format, ...);
в STDLIB. Подпись к этой функции printf. В этом случае мы не можем перегружать в языке C, поскольку компилятор не может определить функцию с различными типами аргументов, поэтому люди решили сделать некоторую хитрую вещь как это:
long int labs (long int n);
int abs (int n);
double fabs (double x);
В языке С ++, метод Подпись - это имя класса, имя метода и аргументы метода. Итак, на этом языке мы можем перегружать методы.
ПРОБЛЕМА
Я не могу получить простой ответ, что сигнатура метода в 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 объект запись тип информации для аргументов и возвращаемого значения методы
Аргументы и возвращаемое значение ?! Только используя аргументы и возвращаемое значение, мы можем однозначно идентифицировать метод? Это очень странно.