美文网首页
Objective-C 单例创建

Objective-C 单例创建

作者: spectatorNan | 来源:发表于2016-03-24 21:53 被阅读23次
    #import "Singleton.h"
    
    @implementation Singleton
    static id manager = nil;
    + (Singleton *)manager {
        
        
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            manager = [[Singleton alloc] init];
        });
        
        return manager;
    }
    
    + (instancetype)allocWithZone:(struct _NSZone *)zone {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            manager = [super allocWithZone:zone];
        });
        return manager;
    }
    
    - (id)copy {
        return [Singleton manager];
    }
    

    下面是本人所犯的错误

    #import "Singleton.h"
    
    @implementation Singleton
    static id manager = nil;
    + (Singleton *)manager {
        
        
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            manager = [[Singleton alloc] init];
        });
        
        return manager;
    }
    
    + (instancetype)allocWithZone:(struct _NSZone *)zone {
        return [Singleton manager]; // 创建对象init的时候会调用该方法,所以这种写法的后果就是进入死循环。无限执行manager方法和本方法。
    }
    
    - (id)copy {
        return [Singleton manager];
    }
    

    相关文章

      网友评论

          本文标题:Objective-C 单例创建

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