2012-06-17 20 views

Respuesta

1

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.

+0

¿Hay consideraciones de rendimiento cuando se usa '[]' sobre '.'? – raffian

+0

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 –

+1

En realidad son idénticos cuando el programa realmente se ejecuta. Quiero decir, literalmente. –

1

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";

+0

¿Qué pasa con '->', como en Label-> setText ("algo de texto "); ? – raffian

+0

Consulte aquí con respecto a -> http://stackoverflow.com/questions/4486048/what-is-in-objective-c –

+0

La notación de puntos es muy simple, para las propiedades, al menos, al diablo con los corchetes ;-) – raffian

1

Por el bien de la pedantería, por qué no conseguir a bajo nivel:

objc_msgSend(object, sel_getUid("foo"), errVar); 
+0

estás bromeando, ¿verdad? eso es muy sintácticamente ruidoso :-) – raffian

+0

¡Ha, un voto a la baja! – CodaFi

+0

¡Ahora hay dos! ¡Parece que algunas personas necesitan repasar sus funciones de tiempo de ejecución! – CodaFi

4

Puede utilizar KVC:

[label setValue:@"Some text" forKey:@"text"]; 
Cuestiones relacionadas