static作用
static在程序运行中只初始化一次,也就是说被static标记的变量的内存地址是唯一确定的,不会改变,举个例子说明。
- (void)viewDidLoad {
[super viewDidLoad];
int a = [self add];
int b = [self add];
int c = [self add];
int d = [self add];
NSLog(@"a:%d--b:%d--c:%d--d:%d", a, b, c, d);
}
- (int)add
{
static int count = 0;
NSLog(@"count地址:%p", &count);
return ++count;
}
打印结果
count地址:0x10c2def70
count地址:0x10c2def70
count地址:0x10c2def70
count地址:0x10c2def70
a:1–b:2–c:3–d:4
我们发现count的地址4次打印都相同,也就是说系统只对count初始化一次,只分配一次内存地址,所以count的值每次都在上一次的基础上+1,有人会问这个有什么用,其实单例模式就是借助static来实现的,下面直接贴代码了。
+ (instancetype)shareManager
{
static LXManager *manager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [[self alloc]init];
});
return manager;
}
本文通过一个具体的Objective-C示例,详细解析了static关键字的作用,包括其内存分配特性及如何利用它实现单例模式。
943

被折叠的 条评论
为什么被折叠?



