美文网首页
ios 单例

ios 单例

作者: 泛坷 | 来源:发表于2017-09-28 11:53 被阅读13次

    做IOS好几年了,今天用单例这块,今天在单例出现了点小问题,(团队开发)

    创建单例方法
    第一种

    static Singleton * _singleton;
    
    @implementation Singleton
    + (instancetype)manager{
        static dispatch_once_t onceToken;
        // 一次函数
        dispatch_once(&onceToken, ^{
            if (_singleton == nil) {
                _singleton = [[Singleton alloc]init];
            }
        });
        return _singleton;
    }
    

    代码自己用可以;不严谨

    第二种

    +(instancetype) shareInstance{
        static dispatch_once_t onceToken ;
        dispatch_once(&onceToken, ^{
            _singleton = [[super allocWithZone:NULL] init] ;
        }) ;
        return _singleton ;
    }
    
    +(id) allocWithZone:(struct _NSZone *)zone
    {
        return [Singleton shareInstance] ;
    }
    
    -(id) copyWithZone:(struct _NSZone *)zone
    {
        return [Singleton shareInstance] ;
    }
    

    alloczone这个方法虽然被弃用,但在单例这块显示出他的优点,可以有效规避,同事不知道这是单例的情况下,使用alloc init方法

    第三种

    +(instancetype)myAlloc{
        return [super allocWithZone:nil];
    }
    
    +(AlertViewSigleton *)mamager{
        static dispatch_once_t onceToken;
        // 一次函数
        dispatch_once(&onceToken, ^{
            if (_singleton == nil) {
                _singleton = [[AlertViewSigleton myAlloc]init];
            }
        });
        return _singleton;
    }
    
    +(instancetype)alloc{
        NSAssert(0, @"这是一个单例对象,请使用+(AlertViewSigleton *)mamager方法");
        return nil;
    }
    +(instancetype)allocWithZone:(struct _NSZone *)zone{
        return [self alloc];
    }
    -(id)copy{
        NSLog(@"这是一个单例对象,copy将不起任何作用");
        return self;
    }
    +(instancetype)new{
        return  [self alloc];
    }
    

    感谢
    https://www.2cto.com/kf/201412/362291.html

    相关文章

      网友评论

          本文标题:ios 单例

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