Técnicamente, la sobrecarga de métodos no es posible en Objective-C. En la práctica, generalmente puede lograr los mismos resultados, incluso en los casos en que no podría hacerlo en C++. En Objective-C, los nombres de los métodos incluyen dos puntos delante de cada argumento, y los dos puntos son PARTE DEL NOMBRE DEL MÉTODO, lo que significa que su ejemplo utiliza diferentes nombres de método. En la práctica, esto se convierte en una especie de funcionalidad de pseudo-nombre-parámetro, y puede obtener una sobrecarga de pseudo método mediante el argumento FUNCTION en lugar del argumento TYPE. En la mayoría de los casos, esto realmente será más útil, pero no es una sobrecarga de métodos en sentido estricto, porque los nombres de los métodos son diferentes.
Ejemplo:
-(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;
Esto funcionaría en Objective-C, pero no se podía conseguir una funcionalidad similar en C++, debido a que el número de argumento y tipos son los mismos, sólo las funciones de argumentos son diferentes. En algunos casos, el modelo C++ puede lograr una funcionalidad más útil. Esto se demuestra por la clase NSKeyedArchiver:
-(void)encodeFloat:(float)realv forKey:(NSString *)key
-(void)encodeInt32:(int32_t)intv forKey:(NSString *)key
Aquí tuvieron que hacer los tipos de argumento parte del nombre moethod, que es feo. Si pudiera elegir entre una sobrecarga de C++ y una "sobrecarga" de Objective-C, aún elegiría la última.
que he leído muchas veces los programadores dicen que la sobrecarga de funciones no es posible en C objetiva – Matrix
Estoy en lo cierto? .... – Matrix
Esto no está sobrecargando, sus métodos tienen diferentes selectores (= nombres). Uno es 'AddMethod:' y el otro es 'AddMethod ::' – Sven