Насколько мне известно, Objective-C не поддерживает перегрузку методов. Что может быть альтернативой этому в Objective-C? Или мне всегда следует использовать другое имя метода?
131
Насколько мне известно, Objective-C не поддерживает перегрузку методов. Что может быть альтернативой этому в Objective-C? Или мне всегда следует использовать другое имя метода?
Правильно, objective-C не поддерживает перегрузку методов, поэтому вам придется использовать разные имена методов.
Однако обратите внимание, что «имя метода» включает ключевые слова сигнатуры метода (имена параметров, стоящие перед символом «: »), поэтому ниже представлены два разных метода, даже если они оба начинаются с «writeToFile»:
-(void) writeToFile:(NSString *)path fromInt:(int)anInt;
-(void) writeToFile:(NSString *)path fromString:(NSString *)aString;
(имена двух методов - «writeToFile: fromInt:» и «writeToFile: fromString:»).
Возможно, стоит упомянуть, что даже если Objective-C не поддерживает перегрузку методов , Clang + LLVM поддерживает перегрузку функций для C. Хотя это не совсем то, что вы ищете, это может оказаться полезным в некоторых ситуациях (например, когда осуществление немного взломанный (идет вразрез с инкапсуляцией) версию этого дизайна посетитель шаблон )
Вот простой пример того, как работает перегрузка функций:
источник
id
и находясьisKindOfClass:
в распоряжении, - это совсем другая история ...id
иisKindOfClass:
охватываю большинство практических сценариев. Одна из причин, по которой вы можете предпочесть перегрузку, - это автоматический выбор наиболее конкретного типа, для которого требуется небольшая дополнительная нагрузка при явной проверке типов.Дэвид прав в том, что перегрузка метода не поддерживается в Objective-C. В этом смысле он похож на PHP. Как он также указывает, обычной практикой является определение двух или более методов с разными сигнатурами в том виде, в каком он их приводит. Однако также возможно создать один метод с использованием типа «id». С помощью типа «id» вы можете отправить любой объект (и любые примитивы, использующие класс NSNumber) в метод, а затем из самого метода вы можете проверить его тип и при необходимости вызвать соответствующее исключение. Хотя это незначительно снижает производительность, скорее всего, оно будет номинальным или незначительным, если вы не обрабатываете большие объемы данных.
Это также прекрасное место для реализации протокола, обеспечивающего соблюдение типа объекта, что можно сделать так:
источник