[英]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.