Pregunta

Tengo entendido que en Objective-C debo declarar variables de instancia como parte de la interfaz de mi clase, incluso si estas variables son detalles de implementación y tienen acceso privado.

En "subjetiva" C, que puede declarar una variable en mi archivo .c y no es visible fuera de esa unidad de compilación. Puedo declarar en el archivo .h correspondiente, y entonces cualquiera que une en esa unidad de compilación puedo ver la variable.

Me pregunto si hay una opción equivalente en Objective-C, o si debo declarar de hecho cada Ivar en el .h para mi clase.

Ari.

¿Fue útil?

Solución

Ari,

Una buena referencia a cómo lograr declaraciones de variables ejemplo "invisibles" puede encontrar aquí con el crédito dado con respeto a Matt Gallagher.

Espero que ayuda, Frank

Otros consejos

tradicionalmente han sido necesarias las variables de instancia para determinar el tamaño de la clase. Siempre ha sido una mala práctica para acceder directamente a los Ivars, y que no es el punto. En el tiempo de ejecución moderna, esto es menos necesario, pero en todo caso, no es una fuga de abstracción menos que los clientes están confiando en Ivars de la clase, que debe ser imposible, ya que los está declarando como @protected o @private, ¿verdad?

Para restringir el acceso, se pueden utilizar los @private o @protected palabras clave:

@interface Foo : NSObject {
    @private
    int barPrivate;

    @protected
    int barProtected;

    @public
    int barPublic;
}
@end

EDIT:. arañazos todo, resulta que realmente necesito un poco de sueño

Ivars son @protected por defecto (aunque @private y @protected no garantizan que las otras clases no puedan acceder a ellos - siempre se puede Ivars de acceso con getValue:forKey:). Nunca se debe Ivars directamente de acceso de otras clases directamente en cualquier caso - la "elección" es si es o no exponer a los Ivars como propiedades (sólo hay que confiar en todas las clases siguiendo la convención que no Ivars de acceso directamente).

En el nuevo Objective-C en tiempo de ejecución, que no tiene que declarar Ivars en absoluto, ya que pueden ser sintetizados en tiempo de ejecución, pero por desgracia no funciona con el simulador de iPhone, así que por ahora, es mejor simplemente Para contar todas las Ivars en el archivo .h.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top