Как получить доступ к переменной из внутреннего класса - PullRequest
5 голосов
/ 17 марта 2011
 //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). Я хочу получить доступ к переменной логического типа (isActive), определенной в классе MainClass, из внутреннего класса. То, что я пытаюсь сделать, это то, что внутренний класс будет работать в отдельном потоке и будет продолжать проверять переменную isActive в основном классе, и если isActive имеет значение false, то он прекратит запуск нового потока .. Заранее спасибо ...

Ответы [ 2 ]

8 голосов
/ 17 марта 2011

Objective-C не имеет внутренних классов.Попробуйте сделать свойство isActive свойством MainClass, дать InnerClass указатель на экземпляр MainClass и позволить InnerClass просто получить доступ к свойству.

3 голосов
/ 17 марта 2011

Objective-C не имеет внутренних классов в качестве языковой конструкции, однако вы можете делать все что угодно, например, скрывать как интерфейс, так и реализацию «внутреннего класса» в файле .m MainClass и иметь скрытыйфабричный метод (не в интерфейсе) в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...