Перегрузка метода возможна в objective c, я прав?

#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 and methodoverloading: . Если у вас есть два параметра, имя будет methodoverloading:anotherparm: . Однако, как вы указали, тип parm не является частью внутреннего имени.

2. Спасибо, мистер Сапи. Это ответ. я искал.