[Objective-C] 单例模式中,为什么用 static 修饰 dispatch_once_t?

2015-07-28 11:20:58 +08:00
 marginleft

比如:

+ (instancetype)sharedManager
{
    static PhotoManager *sharedPhotoManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        [NSThread sleepForTimeInterval:2];
        sharedPhotoManager = [[PhotoManager alloc] init];
        NSLog(@"Singleton has memory address at: %@", sharedPhotoManager);
        [NSThread sleepForTimeInterval:2];
        sharedPhotoManager->_photosArray = [NSMutableArray array];
    });
    return sharedPhotoManager;
}

这里有:

static PhotoManager *sharedPhotoManager = nil;
static dispatch_once_t onceToken;

为何用static修饰?不用staitc有何影响?

1486 次点击
所在节点    C
6 条回复
cheng4741
2015-07-28 12:39:35 +08:00
不用static,下次执行这函数怎么知道执行过没有? local Variable 执行完函数就销毁了。成员变量也不行,这是类方法。所以只能是static
loveuqian
2015-07-28 12:41:07 +08:00
onceToken 顾名思义
loveuqian
2015-07-28 12:42:18 +08:00
你可以去看下培训班视频。ui进阶第一天的视频里面有很详细讲,包括app启动原理,uiwindow,我昨天上的就是这个。。。
xuyuheng0905
2015-07-28 12:55:38 +08:00
这叫local-static变量,函数第一次调用时会被创建,并初始化为0,之后生命周期跟应用生命周期保持一致。
fhefh
2015-08-12 22:49:19 +08:00
@loveuqian 兄弟是哪个培训班的视频?
loveuqian
2015-08-12 23:02:57 +08:00
@fhefh
我晕现在看到我之前的回答怎么跟 LZ 问的问题毫无关系。。
static 就是只定义一次,只为他开辟一次空间,作用域过了也还在不销毁。。
不用每次都要定义都要开辟空间然后又要销毁这样浪费性能

我现在就在培训班。现在网上传的最好的就是黑马4期那套了。都是李明杰讲的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/208847

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX