#objective-c
#objective-c
Вопрос:
Я везде читал, что objective c не поддерживает перегрузку метода, но я наткнулся на разные результаты. Что я знаю о перегрузке метода, так это «Методы, имеющие одно и то же имя, но разные параметры».
Пожалуйста, попробуйте это:
Файл интерфейса
-(void)methodoverloading;
-(void)methodoverloading :(int)parameter;
Файл реализации
-(void)methodoverloading{
NSLog(@"methodoverloading method with no Parameter");
}
-(void)methodoverloading :(int)parameter{
NSLog(@"methodoverloading method with Parameter");
}
Вызов:
[self methodoverloading];
[self methodoverloading: 100];
Результат: Ок
2014-06-21 17:16:09.272 BasicFundamentals[869:a0b] метод перегрузки метода без параметра 2014-06-21 17:16:09.272 BasicFundamentals[869:a0b] метод перегрузки метода с параметром
я прав или где-то ошибаюсь? Спасибо
Ответ №1:
В Objective C сигнатура метода включает параметры.
Ваши два метода:
- (void)methodoverloading
и
- (void)methodoverloading:(int)
имеют разные сигнатуры ( methodoverloading
против methodoverloading:
) и, следовательно, разные методы.
Что люди имеют в виду, когда говорят, что Objective C не поддерживает перегрузку, так это то, что вы не можете определить:
- (void)method:(int)arg
и
- (void)method:(NSString *)arg
и пусть компилятор выбирает между ними в зависимости от типа, который вы предоставляете.
Комментарии:
1. Да, фактические внутренние имена ваших первых двух методов —
methodoverloading
andmethodoverloading:
. Если у вас есть два параметра, имя будетmethodoverloading:anotherparm:
. Однако, как вы указали, тип parm не является частью внутреннего имени.2. Спасибо, мистер Сапи. Это ответ. я искал.