完整版单例

单例是一种设计模式,通过一个类方法获取到的实例是唯一的,它就是个单例。

static类型的全局变量的值是存储到全局静态区,所有对象的同一个static类型的全局变量的指针指向同一块空间,所以当静态存储区里面的值被修改时,所有对象里面的指针所指向的这块空间的值都被改变,static类型的全局变量的值可以实现对象之间数据共享

写单例类方法的规则:一般是以sharedXXX、defaultXXX、currentXXX的格式来创建

static SingleCase* singleCase = nil;//先声明一个全局静态变量

+ (SingleCase *)sharedSingleCase {

    @synchronized(self) {

        if (singleCase == nil) {

            singleCase = [[super allocWithZone:NULL] init];

        }

    }

    return singleCase;

}

另外一种方法也是常用的一种方法是GCD里面的一套API

+ (SingleCase *)sharedSingleCase {

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        singleCase = [[super allocWithZone:NULL] init];

    });

    return singleCase;

}

模仿系统写一个自己的单例

void TZ_dispatch_once(dispatch_once_t *predicate, dispatch_block_t block) {

    if (*predicate == 0) {

        *predicate = 1;

        if (block) {

            block();

        }

    }

}

+ (SingleCase *)sharedSingleCase {

    @synchronized(self) {

        TZ_dispatch_once(onceToken, ^{

            singleCase = [[super allocWithZone:NULL] init];

        });

    }

    return singleCase;

}

完整版单例需要实现的方法

+ (instancetype)allocWithZone:(struct _NSZone *)zone {

    return [SingleCase sharedSingleCase];

}

下面两个方法需要采用协议 <NSCopying, NSMutableCopying>

- (id)copyWithZone:(NSZone *)zone {

    return [SingleCase sharedSingleCase];

}

- (id)mutableCopyWithZone:(NSZone *)zone {

    return [SingleCase sharedSingleCase];

}

- (instancetype)retain {

    return self;

}

- (oneway void)release {

}

- (instancetype)autorelease {

    return self;

}

- (NSUInteger)retainCount {

    return NSUIntegerMax;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 单例模式 什么是单例模式? 单例模式想一个大独裁者,他规定在他的国度里面,所有数据的访问和请求都得经过他,甚至你要...
    GitHubPorter阅读 4,913评论 0 4
  • 线程间的通信 从子线程回到主线程 延时执行 iOS常见的延时执行有两种方式p 调用NSObject的方法 p 使用...
    一抹月光3053阅读 4,121评论 1 12
  • 一. ARC环境下的单例模式 单例模式的基本概念单例, 顾名思义, 即在整个程序中, 某一个类只有唯一一个实例, ...
    面糊阅读 4,106评论 0 50
  • 2017-07-30 黑珍珠 ——从城坊间、乡土系列人士之“燕子” 火山 文学群友小蚂蚁引我们去过她的娘家“张屋仔...
    朱明云阅读 4,892评论 0 7
  • 周末,无所事事。吃了点饭,就背个包,独自一人出去闲逛。 在这里,很多事都不是太顺心,所以我选择一个人。这段日子,真...
    依海阅读 2,600评论 0 0

友情链接更多精彩内容