Тип данных, возвращаемых методом вместе с типами данных каждого из его параметров в порядке передачи этих параметров методу, составляют сигнатуру этого метода.

Существование двух методов одного и того же типа (метода класса или метода экземпляра) в одном и том же классе с одним и тем же именем недопустимо, даже если они имеют разные сигнатуры.

Так, например, вы не может иметь два метода экземпляра класса MyClass с одним именем myMethod, один из которых возвращает void, а второй — NSString. Аналогично нельзя иметь два метода экземпляра класса MyClass с именем myMethod:, оба возвращающие void, но один из которых принимает параметр CGFloat, а второй — NSString. Попытки нарушить это правило будут заблокированы компилятором, который объявит об ошибке “duplicate declaration” (“повторное объявление”). Причиной появления этого правила является то, что, если бы два таких метода могли существовать, не имелось бы способа определить при получении сообщения, какой именно из этих методов должен быть вызван.

Вы можете подумать, что этот вопрос можно решить на основе типов параметров, участвующих в вызове. Если один myMethod: принимает параметр CGFloat, а другой — NSString, то, когда вызывается myMethod:, Objective-C мог бы взглянуть на фактический аргумент и понять, какой из методов должен быть вызван. Но Objective-C таким образом не работает. Да, есть языки программирования, которые обеспечивают такую возможность, которая называется перегрузкой, но Objective-C не является одним из них.


Похожие статьи

 

 

 

Добавить комментарий