簡體   English   中英

類內的靜態變量范圍?

[英]Static variable scope within class?

誰能告訴我下面的類中的靜態變量的范圍是什么?

@implementation SharedManager

static id myInstance = nil;

+(id)sharedInstance {
    if(myInstance == nil) {
        myInstance = [[self alloc] init];
    }
    return myInstance;
}

在測試中,我從該類創建了一個實例,然后將其釋放,但是注意到在創建第二個實例時,靜態值不是nil(即指向先前發布的對象)。對於該測試,我通過覆蓋-(void)來解決此問題。為該類取消分配。

-(void)dealloc {
    NSLog(@”_deal: %@”, [self class]);
    [super release]
    myInstance = nil
}

加里

變量的范圍僅限於“ SharedManager”類本身(因為它已在@implementation部分中聲明,因此對子類將不可見)。

變量的持續時間是“靜態的”,意味着與類本身關聯的變量有一個副本。 分配/取消分配類的實例時,不會創建/銷毀它。

也; 如果您的類打算是線程安全的,則應該這樣做

@synchronized(self) {
if (myInstance == nil) {
    myInstance = [[self alloc] init];
}

到您的sharedInstance方法,以處理兩個線程同時調用sharedInstance的情況。

據我了解,該變量的可見性范圍低於當前源文件中其聲明的范圍,並且生存期是全局的。 好像它是一個C靜態變量。

在其他新聞中,您可以在@implementation塊中編寫C函數-它們將像常規C函數一樣工作。

在ObjC,AFIAK中沒有“靜態類”變量的概念。 這不是C ++。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM