如何从内部类访问变量

时间:2011-03-17 03:01:34

标签: objective-c

 //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

我有MainClass,它有一个内部类(InnerClass)。我想从内部类访问MainClass类中定义的布尔类型变量(isActive)。我想要做的是内部类将在一个单独的线程上运行,并将继续检查主类上的isActive变量,如果isActive为false,那么它将停止运行新线程..提前感谢... < / p>

2 个答案:

答案 0 :(得分:8)

Objective-C没有内部类。考虑使isActive成为MainClass的一个属性,给InnerClass一个指向MainClass实例的指针,让InnerClass只是访问该属性。

答案 1 :(得分:3)

Objective-C没有内部类作为语言构造,但你可以做各种棘手的事情,比如隐藏MainClass的.m文件中的“innerclass”的接口和实现,并隐藏MainClass上的工厂方法(不在界面中)创建“内部类”,其中bool*属性分配给主类的&isActive

<强> 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