He revisado un montón de publicaciones sobre este tema. Quizás no me topé con "el uno" y alguien me señalará en esa dirección. La pregunta es simple y probablemente tiene una respuesta simple.¿Cómo declarar variables de instancia y métodos no visibles o utilizables fuera de la instancia de clase?
Si tiene dos ivars, por ejemplo, "public_ivar" y "private_ivar", ¿dónde/cómo debería declararlos para que lo público sea público y lo privado no se exponga de forma alguna a nadie que mire el encabezado? ¿archivo?
La misma pregunta en el caso de "public_method" y "private_method".
Me gustan los archivos de encabezado limpio (en otros idiomas) que solo exponen los métodos y ivars que deseo que alguien más vea. Debería poder publicar su archivo de encabezado y no correr el riesgo de que alguien acceda a algo que no debería. ¿Cómo se hace eso en el objetivo C?
Por ejemplo, supongamos que decido que necesito usar un ivar para mantener un registro de algunos datos, un contador o algo así, entre varios métodos de clase que necesitan acceso a esta información. Si ese ivar se declara convencionalmente en el encabezado debajo de @interface, su existencia se anuncia públicamente y cualquiera puede usarla para crear una instancia de la clase. El escenario ideal sería que este ivar no sería visible en absoluto fuera de la implementación de la clase.
Bien, voy a echar un vistazo a esto. Estoy trabajando con Algoritmos Genéticos y Redes Neuronales. Las clases terminan con montones de variables que se necesitan internamente. Muy pocos de estos realmente necesitan visibilidad en el nivel del archivo de encabezado. ¿Es su primer ejemplo del archivo de implementación para iOS4 + (ya que no declara int privateInt; antes de la declaración @property)? –
@Martin No estoy seguro de cuándo Objective-C 2.0, que permite la creación automática de variables de instancia de respaldo, estuvo disponible para iOS. –
@Martin [Esta página en el sitio web de Apple] (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html%23//apple_ref/doc/uid/ TP40008048-CH106-SW1) no incluye una versión específica de iOS. –