2011-03-17 23 views
5
//MainClass.m 

@interface InnerClass : NSObject{ 

} 
@end 

@implementation InnerClass 

-(void)run{ 
     while(isActive){//want to access this variable which defined in MainClass 
     //do something 
     } 
} 

@end 

@interface MainClass : NSObject{ 
     BOOL isActive; 
} 
@end 

@implementation MainClass 


@end 

Tengo MainClass y tiene una clase interna (InnerClass). Quiero acceder a la variable de tipo booleano (isActive) definida en la clase MainClass desde la clase interna. Lo que intento hacer es que la clase interna se ejecute en un hilo separado y siga revisando la variable isActive en la clase principal y si isActive es falso, entonces dejará de ejecutar el nuevo hilo ... Gracias de antemano ...Cómo acceder a una variable desde la clase interna

Respuesta

8

Objective-C no tiene clases internas. Considere hacer de isActive una propiedad de MainClass, darle a InnerClass un puntero a una instancia de MainClass, y dejar que InnerClass simplemente acceda a la propiedad.

3

Objective-C no tiene clases internas como construcción de lenguaje, sin embargo, puede hacer todo tipo de cosas complicadas como ocultar la interfaz y la implementación de la "clase interna" en el archivo .m de la clase principal y tener una método oculto de fábrica (no en la interfaz) en la clase principal que crea la 'clase interna' con una propiedad bool* asignada al &isActive de la clase principal.

MainClass.h

@interface MainClass : NSObject{ 
     BOOL isActive; 
} 
@end 

MainClass.m

@interface InnerClass : NSObject{ 
     BOOL* isActive; 
} 

-(id)initWithActive:(BOOL*)isAct){ 

     if (self = [super init]) { 
     isActive = isAct; 
     } 
     return self; 
} 

@end 

@implementation InnerClass 

-(void)run{ 
     while(*isActive){//want to access this variable which defined in MainClass 
     //do something 
     } 
} 

@end 


@implementation MainClass 

     //Can use [self newInnerClass] to create a new instance of the innerclass 
    -(id)newInnerClass{ 
      return [[[InnerClass alloc] initWithActive:&isActive] autorelease]; 
     } 


@end 
+0

Podría escribir un poco de código? No entiendo lo que quiere decir con un método de fábrica oculto ... – codereviewanskquestions

+0

Me refiero a un Método que configura la instancia y no se muestra en la interfaz. código agregado – jbtule

+0

Bastante una solución inteligente, creo. Me pregunto, sin embargo, si esto de alguna manera está haciendo las cosas de la manera 'no Objetiva-C'. Tiene que haber alguna forma más general de definir pequeñas clases de utilidad o algo similar. ¿O es tener todo en los métodos delegados? Lo siento si uso la terminología equivocada, soy bastante nuevo en Objective-C. – DuneCat

Cuestiones relacionadas