Vengo del mundo de Java, por lo que para mí es object.foo()
, pero en Objective C, ¿la mensajería de objeto es la única forma de invocar un método?Sintaxis para invocar un método en Objective C?
[object foo];
Vengo del mundo de Java, por lo que para mí es object.foo()
, pero en Objective C, ¿la mensajería de objeto es la única forma de invocar un método?Sintaxis para invocar un método en Objective C?
[object foo];
La primera cosa que viene a la mente es el uso de @property y punto-notación. Una clase con @property llamado 'foo' le permite hacer la siguiente manera:
anInstance.foo = @"bar";
cuales literalmente se traduce en tiempo de compilación a
[anInstance setFoo:@"bar"];
(similar con "captadores")
Las otras formas son más avanzadas, como el método performSelector: de NSObject u otros sistemas como NSInvocation, etc. Yendo más a fondo, hay formas de invocar métodos en el tiempo de ejecución, con funciones c (toda esta sintaxis finalmente se reduce a do alling c-functions de todos modos); pero estoy seguro de que eso no es lo que buscas.
Sí. Puede usar la sintaxis de puntos para obtener o establecer las propiedades del Objetivo C. Así que para el ajuste del texto en una etiqueta * UILabel ejemplo, se puede hacer ya sea [label setText:@"some text"];
o label.text = @"some text";
Por el bien de la pedantería, por qué no conseguir a bajo nivel:
objc_msgSend(object, sel_getUid("foo"), errVar);
Puede utilizar KVC:
[label setValue:@"Some text" forKey:@"text"];
¿Hay consideraciones de rendimiento cuando se usa '[]' sobre '.'? – raffian
En realidad, utilizó la frase "¿la mensajería de objeto es la única forma de invocar un método?", Por lo que la respuesta técnica es "no". La mensajería se traduce a las llamadas a la función de tiempo de ejecución, y usted puede usarlas también. De hecho, ha tocado una de las "características" centrales del tiempo de ejecución, enlace dinámico de un mensaje a un método. El "método" (o, implementación para ser más preciso) se busca en el tiempo de ejecución para cada mensaje enviado. Mira esto: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html –
En realidad son idénticos cuando el programa realmente se ejecuta. Quiero decir, literalmente. –