iOS单例模式

作者: ManoBoo | 来源:发表于2015-12-10 12:26 被阅读612次

    参考自http://www.cnblogs.com/lyanet/archive/2013/01/11/2856468.html

    单例
    --①概念:单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类
    --②使用情景:iOS中几乎所有的app都只能同时登录一个帐号,而且 对于电商类app 下单时会带着用户ID,这时候单例尤为重要!

    创建方法

    ① 使用线程锁 @synchronized(self) {} 控制某一时间只允许一个线程访问初始化方法
    static User *instance
    + (instancetype)shareUser
    { @synchronized(self) { //设置同时只有一个线程可以访问shareUser方法 if (!instance) { instance = [[self alloc] init]; } } return instance; }
    ---ps:『维尼的小熊』告知我,绝对安全的单例创建方法,
    将 allocWithZone copyWithZone 等方法都重写
    ②使用GCD 初始化线程只执行一次
    + (instancetype) shareUserGCD { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[self alloc] init]; }); return instance; }

    测试:

    User *xiaoming = [User shareUser]; xiaoming.name = @"xiaoming";//User类有一个一个name属性 User *lily = [User shareUser]; NSLog(@" xiaoming.name = %@",xiaoming.name); NSLog(@" lily.name = %@,lily.name");

    输出结果为: xiaoming.name = xiaoming
    lily.name = xiaoming,
    分析:lily.name并没有赋值,但是lily.name = xiaoming,
    由此可见 xiaoming 与lily就是一个对象,单例创建成功
    ps:也可以输出一个 xiaoming与lily的内存地址,相等即为单例

    `

    相关文章

      网友评论

        本文标题:iOS单例模式

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