2011-03-17 141 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 

我有MainClass並且它有一個內部類(InnerClass)。我想從內部類訪問在MainClass類中定義的布爾類型變量(isActive)。我想要做的是,內部類將在一個單獨的線程上運行,並將繼續檢查主類上的isActive變量,如果isActive爲false,那麼它將停止運行新線程。在此先感謝...如何從內部類訪問變量

回答

8

Objective-C沒有內部類。考慮使isActive成爲MainClass的一個屬性,給InnerClass一個指向MainClass實例的指針,讓InnerClass直接訪問該屬性。

3

Objective-C沒有內部類作爲語言結構,但是你可以做各種棘手的事情,比如隱藏MainClass的.m文件中的「innerclass」的接口和實現,並且有一個MainClass上隱藏的工廠方法(不在接口中),該方法創建'innerclass',其中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 
+0

你能寫的代碼一點點?我不明白你的意思是一個隱藏的工廠方法... – codereviewanskquestions 2011-03-17 05:04:32

+0

我只是指一個方法,設置實例,並沒有顯示在界面中。添加代碼。 – jbtule 2011-03-17 06:59:10

+0

非常聰明的解決方案,我認爲。不過,我確實想知道,如果這是以某種方式做'不Objective-C方式'的事情。必須有一些更一般的定義小型實用程序類或類似的方法。或者它是否擁有委託方法中的所有內容?對不起,如果我使用了錯誤的術語,我在Objective-C上很新。 – DuneCat 2012-01-24 11:51:16