[已解答]关于iOS单例一次性线程写法的一点疑惑

线程安全的单例常用写法,

    +(AccountManager *)sharedManager{
            static AccountManager *defaultManager = nil;
            disptch_once_t once;
            disptch_once(&once,^{
              defaultManager = [[self alloc] init];
            });
            return defaultManager;
    }

在用的过程中,有点疑惑的点是:
static AccountManager *defaultManager = nil;
这行代码是在sharedManager方法之内的, 在第二次调用sharedManager的时候defaultManager不会被置为nil吗?

解答:
static 修饰的局部变量,他在编译的时候,就初始化了内存。只是初始化一次,而且在程序中只有一份内存,直到程序结束才会被销毁。他被储存到静态储存区。你可以打个断点试一下,无论是once 还是defaultManager应该都是不会执行的,他在编译的时候,就初始化了内存。
在SG发的问题及原答案链接地址:https://segmentfault.com/q/1010000008959448

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,397评论 0 6
  • 1.写一个NSString类的实现 +(id)initWithCString:(c*****t char *)nu...
    韩七夏阅读 3,810评论 2 37
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,014评论 0 7
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,043评论 0 12