文档章节

iOS: The Two Ways of Singleton Pattern

BluesChow
 BluesChow
发布于 2015/02/28 15:02
字数 236
阅读 16
收藏 0

iOS开发中,单例模式用的很多,什么是单例,简单来讲“单例是一个类,这个类只有一个实例被实例化。”通常我们会有2种方式使用单例:

1.同步锁的方式

+ (MyClass *)shareInstance {
    static MyClass *obj = nil;
    @synchronized(self) { // **** 或者@synchronized([MyClass class])
        if (nil == obj) {
            obj = [[MyClass alloc] init];
        }
    }
    return obj;
}
2.GCD的dispatch_once方式
+ (MyClass *)shareInstance {
    static dispatch_once_t pred;
    static MyClass *obj = nil;
    dispatch_once_t(&pred, ^{
        obj = [[MyClass alloc] init];
    });
    return obj;
}

dispatch_once的方式同样可以完成和synchronized关键字一样的内容,但是dispatch_once的方式不需要付出锁的资源消耗,也不会带来额外的函数调用的消耗,因为dispatch_once本质上是一个宏。

如果是非ARC的话,就需要额外的实现几个方法,类似copyWithZone:等,具体可以参见:

http://blog.sina.com.cn/s/blog_7c452219010148jo.html

http://blog.csdn.net/ouyangtianhan/article/details/17709827

Reference:

http://blog.csdn.net/swj6125/article/details/9791183

http://www.ianisme.com/ios/1648.html

http://blog.csdn.net/sanpintian/article/details/8139635

© 著作权归作者所有

共有 人打赏支持
BluesChow
粉丝 5
博文 163
码字总数 29622
作品 0
深圳
程序员
Knowledge-Reserve

Knowledge-Reserve ComputerOperatingSystem 编译 静态库&动态库(Linux) 静态链接&动态链接 内存 内联函数&宏 Static&Const 死锁 线程安全 线程同步 锁 DataStructure Programme 集约型&离散...

旭宝爱吃鱼
08/16
0
0
面试官自述:面向高级开发人员的iOS面试问题

当您准备进行技术性iOS面试时,了解您可能会询问哪些主题以及经验丰富的iOS开发人员期望什么是非常重要的。 这是许多硅谷公司用来衡量iOS候选人资历水平的一系列问题。 这些问题涉及iOS开发的...

菇哒微课
04/26
0
0
iOS Design Patterns Excerpt

How MVC works MVC is a design pattern that enforces the separation between the input, processing, and output of an application. To this end, an application is divided into three......

Herbert77
2015/09/02
0
0
10个优秀Objective-C和iOS开发在线视频教程

如果你自己开发iOS应用,你肯定会发现网上有很多资源。学习编程的一个最好的方法就是自己写代码,而开始写代码的最快的方式就是看其他人怎么写。我们从海量视频和学习网站中整理出了我们认为...

mingxun
2014/05/09
0
0
IOS学习,最简单的表格应用程序,学习,列出博客

IOS编程浅蓝教程,这是博客地址http://www.cnblogs.com/haichao/category/425378.html IOS编程浅蓝教程:锲子 IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备 IOS编程浅蓝教程(二) Hel...

andy521zhu
2015/01/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

八大包装类型的equals方法

先看其中一个源码 结论:八大包装类型的equals方法都是先判断类型是否相同,不相同则是false,相同则判断值是否相等 注意:包装类型不能直接用==来等值比较,否则编译报错,但是数值的基本类型...

xuklc
33分钟前
1
0
NoSQL , Memcached介绍

什么是NoSQL 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗...

TaoXu
昨天
0
0
890. Find and Replace Pattern - LeetCode

Question 890. Find and Replace Pattern Solution 题目大意:从字符串数组中找到类型匹配的如xyy,xxx 思路: 举例:words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb"abc ......

yysue
昨天
0
0
Linux | Redis

写在前面的话 常言道,不作笔记不读书。在下是深有体会啊,所以,跟我一起做下本节的笔记吧,或许多年以后,你一定会感谢今天的你。 安装 在官网的下载页 Redis Download 直接写了在Linux的安...

冯文议
昨天
1
0
NoSQL-memcached

NoSQL介绍 NoSQL叫非关系型数据库。而关系型数据库代表有MySQL。对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很...

ln97
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部