iOS 单例模式

作者: _YZG_ | 来源:发表于2016-07-11 11:52 被阅读48次

    单例模式,大家都懂,不要用继承,现在都是GCD搞,现在也都是ARC了,搞个宏,需要其他的参考别的咯,不啰嗦,直接代码,嘿嘿,我喜欢伸手党。

    一、 搞个.h文件

    // .h文件
    #define YZGSingletonH(name) + (instancetype)shared##name;
    
    // .m文件
    #define YZGSingletonM(name) \
    static id _instance; \
    \
    + (instancetype)allocWithZone:(struct _NSZone *)zone \
    { \
    static dispatch_once_t onceToken; \
    dispatch_once(&onceToken, ^{ \
    _instance = [super allocWithZone:zone]; \
    }); \
    return _instance; \
    } \
    \
    + (instancetype)shared##name \
    { \
    static dispatch_once_t onceToken; \
    dispatch_once(&onceToken, ^{ \
    _instance = [[self alloc] init]; \
    }); \
    return _instance; \
    } \
    \
    - (id)copyWithZone:(NSZone *)zone \
    { \
    return _instance; \
    } \
    - (id)mutableCopyWithZone:(NSZone *)zone \
    { \
    return _instance; \
    }
    

    二、使用

    // .h
    #import <Foundation/Foundation.h>
    #import "YZGSingleton.h"
    
    @interface Person : NSObject
    YZGSingletonH(Person)
    @end
    
    // .m
    #import "Person.h"
    
    @implementation Person
    YZGSingletonM(Person)
    @end
    
    
    NSLog(@"%p, %p", [Person sharedPerson], [[Person alloc] init]);
    打印 0x7fda1bc06e80, 0x7fda1bc06e80
    

    相关文章

      网友评论

        本文标题:iOS 单例模式

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