谁能告诉我下面这个类中静态变量的范围是什么?
@implementation SharedManager
static id myInstance = nil;
+(id)sharedInstance {
if(myInstance == nil) {
myInstance = [[self alloc] init];
}
return myInstance;
}
在测试中我从类中创建了一个实例,然后将其释放,但注意到在创建第二个实例时静态不是nil(即指向先前释放的对象)对于测试我通过覆盖修复了这个问题 - (void)该课程的dealloc。
-(void)dealloc {
NSLog(@”_deal: %@”, [self class]);
[super release]
myInstance = nil
}
加里
答案 0 :(得分:1)
变量的范围仅限于“SharedManager”类本身(因为它在@implementation部分中声明,它对于子类是不可见的。)
变量的持续时间是“静态”,意味着有一个与类本身关联的变量副本;当你分配/解除该类的实例时,它不会被创建/销毁。
也;如果你的课程是为了线程安全,你应该做
@synchronized(self) {
if (myInstance == nil) {
myInstance = [[self alloc] init];
}
到您的sharedInstance方法,以处理同时调用sharedInstance的两个线程的情况。
答案 1 :(得分:0)
据我了解,该变量的可见范围低于当前源文件中的声明,并且生命周期是全局的。好像它是一个C静态变量。
在其他新闻中,您可以在@implementation块中编写C函数 - 它们将像常规C函数一样工作。
ObjC,AFAIK中没有“类静态”变量的概念。这不是C ++。