2012-05-13 12 views
6

Duplicar posible:
Is this a new way to define private instance variables in Objective-C?En Objective-C, podemos poner las variables de instancia en la sección @implementation?

tengo siempre poner las variables de instancia en el archivo de interfaz .h, pero acabo de ver algo de código haciendo esto:

@implementation Fraction { 
    int numerator; 
    int denominator; 
} 

que es para mover las variables de instancia al lado de implementación. Funciona también, pero desde cuándo podemos hacerlo (o siempre podemos hacerlo con Objective-C), y supongo que es mejor porque las variables de instancia que usamos no son realmente parte de una interfaz.

+7

Es posible que como [ESTE] (http://stackoverflow.com/questions/10407848/is-this-a-new-way-to-define-private-instance-variables- in-objetivo-c). – Kjuly

+3

Parece que esto es [nuevo para el compilador LLVM] (http://stackoverflow.com/a/8015986/77939). Lo recomendaría en contra de esto si quiere que su código sea portátil. – mpontillo

Respuesta

2

Sí, es la forma preferida y de forma similar usamos la Extensión de clase para definir las propiedades privadas para ocultar el acceso público.

Algo así como -

//Class Extension for private properties and methods 
@interface Fraction() 

@property (nonatomic, assign) int numerator; 

@end 

// Define private instance variable 
@implementation Fraction { 
    int numerator; 
    int denominator; 
} 

// Synthesize properties for generation of getter and setter 
@synthesize numerator = _numerator; 


@end 
+0

extensión también puede definir variables de instancia – user102008

0

Esta funcionalidad ya estaba allí en Objective-C. El objetivo principal de esta funcionalidad es Ocultar datos o Privacidad de datos.

Si desea utilizar algunas variables privadas a las que no se puede acceder fuera de la clase, puede ir con la Categoría en un archivo particular .m.

Incluso en XCode 4.3.2, cuando crea una nueva clase, en el archivo .m por defecto contiene una categoría. (justo antes de la implementación).

ViewController.m 

**@interface ViewController() 
@end** 


@implementation ViewController ....... 

En esa interfaz puede declarar a sus miembros privados allí. Y puede usarlos simplemente con [self variableName] en su archivo .m completo.

Igual que puede declarar sus métodos privados en la misma categoría.

De modo que el objeto de instancia creado fuera del archivo de clase no puede leer estas variables y métodos.

Espero que esto es lo que estás buscando.

Disfruta Codificación :)

+1

Técnicamente, '()' marca una extensión de clase, no una categoría. – echristopherson

+0

Sí, tiene razón, pero la extensión internamente es solo un tipo de categoría. La única diferencia es que los métodos que declaran deben implementarse en el bloque @implementation principal para la clase correspondiente. Específicamente las categorías declaradas con() sin nombre adicional se llaman Extensión. – Mrunal

+0

Mi objetivo era resolver el problema mencionado allí en cuestión y creo que esta funcionalidad de Categoría/Extensión es la mejor solución para eso. – Mrunal

Cuestiones relacionadas