2010-06-29 77 views
2

我有一個計數器用於獲取該計數器索引處的對象,並且需要在另一個類中訪問它。目標C中的全局變量

如何在Objective C中聲明靜態變量?

回答

1

alJaree嗨,
您聲明靜態變量在您的類的實現,並通過靜態訪問允許訪問它:

 
some_class.h: 
@interface SomeClass {...} 
+ (int)counter; 
@end 

some_class.m: 
@implementation SomeClass 
static int counter; 
+ (int)counter { return counter; } 
@end

+0

謝謝,但我如何在另一課中使用它?我只是收到「未聲明」的錯誤。 – jarryd 2010-06-29 11:32:44

+0

你必須'#import「some_class.h」'到每個使用計數器的實現文件中。 – Paul 2010-06-29 12:57:31

+0

@alJaree這或多或少是java中具有公共靜態成員的類的「等價物」。正如Paul所說的,你必須導入它,然後通過[SomeClass counter]訪問它。另一種方法是在頭文件中聲明一個全局變量(就像c中的那樣),但Marcelo已經建議使用這種方法,我認爲從OO的角度來看它更清晰。 – 2010-06-29 15:02:42

2

而不是使其全球,給一個類訪問其他類的櫃檯,或有兩類共享擁有該計數器第三類:

ClassA.h: 
@interface ClassA { 
    int counter; 
} 
@property (nonatomic, readonly) int counter; 

ClassA.m 
@implementation ClassA 
@synthesize counter; 

ClassB.h: 
#import "ClassA.h" 
@interface ClassB { 
    ClassA *a; 
} 

ClassB.m: 
@implementation ClassB 
- (void)foo { 
    int c = a.counter; 
} 
+0

謝謝,但如何? – jarryd 2010-06-29 11:08:12

+0

你的意思是一個getter方法嗎? – jarryd 2010-06-29 11:19:54

+0

使用屬性。它應該足以說明它,以免你寫一個微不足道的吸氣劑的麻煩。 – 2010-06-29 11:53:36