settitle change objective-c

objective-c - settitle - uibutton change text swift 4



¿Cuál es la diferencia entre ''->''(operador de flecha) y ''.''(operador de punto) en Objective-C? (3)

Cuando se utiliza el operador de flecha ptr->member se está ptr->member la referencia de forma implícita a ese puntero. Es equivalente a (*ptr).member . Cuando envía mensajes a un puntero de objeto, el puntero también se elimina de forma implícita.

En Objective-C, ¿cuál es la diferencia entre acceder a una variable en una clase usando -> (operador de flecha) y . (operador de punto)? ¿Se usa -> para acceder directamente vs punto ( . ) No es directo?


La flecha, -> , es una abreviatura de un punto combinado con una desreferencia de puntero, estos dos son los mismos para algún puntero p :

p->m (*p).m

La notación de flecha se hereda de C y C la tiene porque el miembro de la estructura que accede al operador ( . ) Se enlaza más suelto que el operador de desreferenciación del puntero ( * ) y nadie quiere escribir (*p).m todo el tiempo ni quiere cambie la prioridad del operador para que las personas escriban *(pm) para eliminar la referencia de un puntero dentro de una estructura. Entonces, la flecha se agregó para que pudieras hacer ambos p->m y *sp sensatamente sin la fealdad de los paréntesis.


-> es el operador C tradicional para acceder a un miembro de una estructura referenciada por un puntero. Como los objetos de Objective-C se usan (generalmente) como punteros y una clase de Objective-C es una estructura, puede usar -> para acceder a sus miembros, que (generalmente) corresponden a variables de instancia. Tenga en cuenta que si está intentando acceder a una variable de instancia desde fuera de la clase, entonces la variable de instancia debe marcarse como pública.

Así por ejemplo:

SomeClass *obj = …; NSLog(@"name = %@", obj->name); obj->name = @"Jim";

accede al name variable de instancia, declarado en SomeClass (o una de sus superclases), correspondiente al objeto obj .

Por otro lado . se utiliza (normalmente) como la sintaxis de puntos para los métodos get y set . Por ejemplo:

SomeClass *obj = …; NSLog(@"name = %@", obj.name);

es equivalente a usar el name método getter:

SomeClass *obj = …; NSLog(@"name = %@", [obj name]);

Si el name es una propiedad declarada , es posible darle a su método getter otro nombre.

La sintaxis de puntos también se usa para los métodos de establecimiento. Por ejemplo:

SomeClass *obj = …; obj.name = @"Jim";

es equivalente a:

SomeClass *obj = …; [obj setName:@"Jim"];