Sé que es posible definir una variable de instancia pública con @public keyword. Sin embargo, la sintaxis de Objective-C no permite acceder a la variable de otra clase. ¿Qué características debería esperar de @public Ivar? ¿O cómo puedo acceder a Ivars de otra clase?¿Cómo acceder a @public instance variable de otra clase en Objective-C?
Respuesta
Objective-C, como un superconjunto de C, definitivamente permite el acceso de variables de instancia públicas desde fuera de la implementación de la clase. Ahora, la razón por la que puede haber escuchado que no está permitido es que es altamente desaconsejable. En la mayoría de los casos, si desea acceder a una variable de instancia fuera de un contexto de implementación, debe usar accesores y mutadores (propiedades).
Una clase Objective-C realmente se reduce a una estructura C simple con un campo isa
(eso es lo que lo convierte en un objeto), donde los campos públicos son accesibles. Dado que cuando se trata de instancias de clases, estamos trabajando con un puntero a un objeto (estructura especial). Por lo tanto, accedemos a los campos públicos usando ->
.
He aquí un ejemplo:
@interface SomebodyIsntEncapsulating : NSBadIdea {
@public
NSString *badIdea;
BOOL shouldntDoIt;
@protected
NSString *ahThatsBetterThankGod;
@private
NSString *sweetThanksNowEvenMySubclassesCantTouchMe;
}
Ahora, en un contexto completamente diferente, podríamos tener:
SomebodyIsntEncapsulating *whatOh = [[SomebodyIsntEncapsulating alloc]
initWithDanger:kDangerLevelEpicBraceYourself];
whatOh->badIdea = [@"I'm a public field. Make sure to retain or copy me!" copy];
NSLog(@"Please! Write some accessors and mutators!: %@", whatOh->badIdea);
espero que ayudó!
Puede acceder a él como el uso de -> (miembro de puntero) del operador como lo hace normalmente acceso de los miembros de una estructura de c (tenga en cuenta que siempre tiene un puntero a un objeto en obj-c):
...
@public
int a;
...
myObject->a = 1;
Se supone que debe escribir métodos de acceso para hacerlo. El diseño orientado a objetos implica que una clase no debería preocuparse por la estructura interna de los objetos de otra clase.
Dicho esto, id es solo un puntero, por lo que puede hacer obj-> ivar, siempre que sepa lo que está haciendo y no hay forma de escribir un método de acceso adecuado.
- 1. Acceder a la variable estática de otra clase
- 2. Acceder a una variable estática global de otra clase
- 3. accediendo a una variable de otra clase
- 4. Llamar a una variable de otra clase
- 5. ¿Cómo puedo acceder a variables de otra clase?
- 6. Java: Cómo acceder a métodos de otra clase
- 7. ¿Cómo acceder a un objeto de otra clase?
- 8. Ruby Instance Variable Scope Pregunta
- 9. clase fundido a otra clase o convertir clase a otra
- 10. cómo acceder a una variable de clase de la clase externa de clase interna en rubí
- 11. Cómo acceder a una variable desde la clase interna
- 12. ¿Cómo hacer que una clase pueda acceder solo a ciertos miembros privados de otra clase?
- 13. Cómo pasar un nombre de clase como una variable a otra clase en ruby
- 14. ¿Cómo obtengo una variable en otra actividad?
- 15. ¿Cómo usar una variable de una clase, en otra en Java?
- 16. ¿Cómo puedo acceder a los valores almacenados de un Bean desde otra Clase
- 17. cómo pasar una variable a otra rosca
- 18. ¿Cómo acceder a la variable de clase externa sombreada desde la clase interna?
- 19. Consulte la variable de clase en otra definición de variable de clase
- 20. acceder a un miembro protegido de una clase base en otra subclase
- 21. objeto de acceso creado en una clase a otra
- 22. C#: Acceso a Enum desde otra clase
- 23. ¿Copiar una clase a otra?
- 24. Llegar a clase variable de instancia de clase en CoffeeScript
- 25. Método La clase interna local solo puede acceder a la variable local final.¿Por qué?
- 26. Accediendo a Heroku Postgres Instance desde EC2
- 27. ¿Cómo puedo acceder a la variable de tiempo en modelica
- 28. Descubre qué clase llamó a un método en otra clase
- 29. Java: ¿Cómo puedo acceder al campo de una clase con un nombre almacenado en una variable?
- 30. PHP dentro de otra clase
Gracias por una respuesta detallada. ¡Esto es justo lo que quiero saber! – Eonil
Jaja que hizo mi mañana. Buena respuesta – Chris