En realidad, un método Objective-C es solo una función C con dos argumentos siempre presentes al principio.
Este:
-(void)aMethod;
es exactamente equivalente a esto:
void function(id self, SEL _cmd);
mensajes de Objective-C de es tal que esto:
[someObject aMethod];
es exactamente equivalente a esta (casi - - hay un argumento variado problema ABI más allá del alcance de esta respuesta):
objc_msgSend(someObject, @selector(aMethod));
objc_msgSend() busca la implementación adecuada del método (mirando hacia arriba en someObject
) y luego, a través de la magia de una optimización de llamada de cola, salta a la aplicación del método que, para todos los efectos , que funciona exactamente igual que una llamada a la función C que tiene este aspecto:
function(someObject, @selector(aMethod));
literalmente, Objective-C se implementó originalmente como nada más que un preprocesador C. Cualquier cosa que pueda hacer en Objective-C podría reescribirse como C.
Hacer esto, sin embargo, sería un dolor en el culo y no vale la pena el tiempo más allá de la increíble experiencia educativa de hacerlo.
En general, se utilizan métodos de Objective-C cuando se habla de los objetos y la función cuando se trabaja con pegote C recta. Dado que prácticamente todos los sistemas Mac OS X e iOS proporcionan API Objective-C, sin duda alguna para los puntos de entrada de programación de nivel de interfaz de usuario, entonces usas Obj-C la mayor parte del tiempo.
Incluso cuando escribe su propio código de nivel de modelo que es relativamente independiente, normalmente usará Objective-C simplemente porque proporciona un pegamento muy natural entre la funcionalidad state/data &, un inquilino fundamental de la programación orientada a objetos.
Muy conciso y útil. Recuerdo que el C++ original también era solo un preprocesador. – AlanObject