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