博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 辛格尔顿
阅读量:7102 次
发布时间:2019-06-28

本文共 1650 字,大约阅读时间需要 5 分钟。

单例模式:

为什么使用单例,单例模式的用途是什么?以下我们举一个样例来诠释一下

举个大家都熟知的样例——Windows任务管理器,如图,我们能够做一个这种尝试,在Windows任务栏的右键弹出菜单上多次点击启动任务管理器。看是否能打开多个任务管理器窗体?通常情况下,不管我们启动任务管理多少次。Windows系统始终仅仅能弹出一个任务管理器窗体。也就是说在一个Windows系统中。任务管理器存在唯一性。为什么要这样设计呢?我们能够从下面两个方面来分析:其一,假设能弹出多个窗体,且这些窗体的内容全然一致,所有是反复对象,这势必会浪费系统资源。任务管理器须要获取系统执行时的诸多信息。这些信息的获取须要消耗一定的系统资源。包含CPU资源及内存资源等,浪费是可耻的。并且根本没有必要显示多个内容全然同样的窗体;其二,假设弹出的多个窗体内容不一致,问题就更加严重了,这意味着在某一瞬间系统资源使用情况和进程、服务等信息存在多个状态。比如任务管理器窗体A显示CPU使用率10%,窗体B显示CPU使用率15%,究竟哪个才是真实的呢?这纯属调戏用户,给用户带来误解,更不可取。由此可见,确保Windows任务管理器在系统中有且仅有一个很重要。

回到实际开发中,我们也常常遇到类似的情况,为了节约系统资源,有时须要确保系统中某个类仅仅有唯一一个实例,当这个唯一实例创建成功之后,我们无法再创建一个同类型的其它对象,全部的操作都仅仅能基于这个唯一实例。为了确保对象的唯一性,我们能够通过单例模式来实现。这就是单例模式的动机所在。


以下单例模式的几种写法:

在这里创建了一个Person类继承与NSObject

.h文件

//  Person.h

//  单例模式 Singleton 

//  Copyright (c) 2014 summer2014mht@sina.com. All rights reserved.

#import<Foundation/Foundation.h>

@interface Person :NSObject

//单例:一个类仅仅有一个实例在外部创建对象时,不能用alloc.(仅仅要alloc.就会在堆区开辟空间,就意味着有多个对象).

//所以我们要提供一个创建对象的方法.并且是一个+号方法

//default, standard, main, shared开头的都是单例

+ (Person *)sharedPerson;

@end

.m文件

//  Person.m

//  单例模式 Singleton 

//  Copyright (c) 2014 summer2014mht@sina.com. All rights reserved.

#import"Person.h"

@implementation Person

/*

//写法一

+ (Person *)sharedPerson

{

//声明为static ,保证该变量在程序执行期间空间都不会回收.并且保证仅仅初始化一次

//单例的空间在程序执行期间都不会回收,所以要慎重使用单例,否则会造成内存堆积

    static Person *person = nil;

    @synchronized(self){

        if (person == nil) {

            person = [[Person alloc] init];

        }

    }

    return person;

}

*/

//写法二(推荐使用)

+ (Person *)sharedPerson

{

    static Person *person = nil;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        person = [[Personallocinit];

    });

    return person;

}

@end

版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的文章
深度融合信息化 视频监控打击震慑犯罪
查看>>
智能家居未来已来,可没做到这点便是“鸡肋”!
查看>>
北卡一号光伏电站全容并网
查看>>
欧盟向美社交网络发出通牒 限期一月修改服务条款否则罚款
查看>>
等等AMD!英特尔最新路线图曝10nm延期
查看>>
无线领军企业的5G之路
查看>>
Android应用自动化测试——理论、工具和实践(上)
查看>>
《Clojure数据分析秘笈》——1.9节从网页中抓取文本数据
查看>>
WordPress 4.6.1 安全修复版发布
查看>>
保护普通用户上网安全 iOS版WiFi万能钥匙推出安全险
查看>>
链家跨界合作今日头条,大数据将重塑房产交易服务
查看>>
Chinapex创略宣布完成A轮融资 打造企业级数据驱动营销云平台
查看>>
Snapchat 首份成绩单表现不好,它未来还有更多“劫”要渡
查看>>
济宁用大数据“科学治气”
查看>>
联发科技与Orange合作加速物联网设备普及
查看>>
GridView全选
查看>>
我的软件测试之旅:(4)并行——自动化回归测试
查看>>
存储过程中用到的年,月,周的函数
查看>>
SDN的发展壮大确实在蚕食物理网络基础设施的阵地
查看>>
Hadean完成260万美元融资,将颠覆 Spark、Hadoop等大数据框架
查看>>