美文网首页
iOS 面试题之单例

iOS 面试题之单例

作者: 橙色酱油cc | 来源:发表于2016-07-22 23:48 被阅读0次

    单例是一种模式,更像是数学中的单集合,里面有且仅有一个元素.单例的运用场景有很多,尤其是需要全局变量存在的项目.下面分享几个单例的实现.
    1.线程锁

    + (instancetype)sharePerson{
        static Person *_person = nil;
        @synchronized (self) {
            if (!_person) {
                _person = [[Person alloc] init];
            }
            return _person;
        }
    }
    

    2.重写 alloc

    + (instancetype)alloc{
        static Person *_person = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            //里面的代码只执行一遍
          _person = [super alloc];
        });
        return _person;
    }
    

    3.线程安全,GCD 神器.最常用!

    + (instancetype )sharePerson{
        static Person *_person = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _person = [[Person alloc] init];
        });
        return _person;
    }
    

    4.NSZone的一个理解,不深究

    + (instancetype)sharePerson{
        static Person *_person = nil;
        if (!_person) {
            _person = [[super allocWithZone:NULL] init];
        }
        return _person;
    }
    

    相关文章

      网友评论

          本文标题:iOS 面试题之单例

          本文链接:https://www.haomeiwen.com/subject/stoijttx.html