Технически, перегрузка метода невозможна в Objective-C. На практике вы обычно можете достичь тех же результатов, в том числе и в тех случаях, когда вы этого не сделали в C ++. В Objective-C имена методов включают двоеточие перед каждым аргументом, а двоеточия - ЧАСТЬ ИМЕНИ МЕТОДА, что означает, что в вашем примере используются разные имена методов. На практике это становится своего рода функциональностью псевдо-именованных параметров, и вы можете получить перегрузку псевдо-метода аргументом FUNCTION, а не аргументом TYPE. В большинстве случаев это на самом деле будет более полезным, но это не перегрузка метода в строгом смысле, потому что имена методов разные.
Пример:
-(void)makeSquareWithX1:(float)x1 Y1:(float)y1 X2:(float)x2 Y2:(float)y2;
-(void)makeSquareWithX1:(float)x1 Y1:(float)y1 width:(float)width height:(float)height;
Это будет работать в Objective-C, но вы не можете получить аналогичные функциональные возможности в C ++, потому что число и типы аргументов одинаковы, отличаются только функции аргументов. В некоторых случаях модель C ++ может обеспечить более полезную функциональность. Это демонстрирует класс NSKeyedArchiver:
-(void)encodeFloat:(float)realv forKey:(NSString *)key
-(void)encodeInt32:(int32_t)intv forKey:(NSString *)key
Здесь они должны были сделать типы аргументов частью имени метода, что некрасиво. Если бы я мог выбирать между перегрузкой C ++ и «перегрузкой» Objective-C, я все равно выбрал бы последнее.