iOS语言中的单例模式

什么是单例,为什么需要单例?

单例模式的作用就是解决“应用中只需要一个实例”的问题。

当我们需要一个类,而不太关注这个“类”本身的时候,例如iOS设备都有一个重力类UIAccelerometer,其实对于用户,只需要这个类的某些方法,比如实时获取数据,获取x,y,z轴的状态等。所以这个类只需要一个实例就够了,更多的实例只会占用更多的内存空间而已。

 

 

实际应用中的单例

首先在我接触到的公司项目中,使用到的一个单例情况就是记录所有NSUserDefaults信息的单例PCSetting。NSUserDefaults本身就是一个单例,是iOS提供的轻量级数据持久化保存的类。

对于一个单例的创建,我们需要:

 

1.创建一个继承于NSObject的类,并且在.h中声明一个类方法

@interface PCSettings : NSObject

+ (PCSettings*)sharedSettings;

 

2.在.m文件中分别创建一个静态变量,实现sharedSettings方法,以及重写init方法

static PCSettings *g_sharedSettings = nil;

+ (PCSettings *)sharedSettings
{
    if (g_sharedSettings == nil)
    {
        g_sharedSettings = [[PCSettings alloc] init];
    }
    
    return g_sharedSettings;
}

- (id)init
{
    self = [super init];
    if (self != nil) {
        NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
            hub_userId = [[prefs objectForKey:KEY_HubUserID] copy];
       .
       .
       .
    }
    return self;
}    

如此就完成了一个单例的创建啦。

 

 

另一种通过GCD创建单例的方法

+ (PCSettings *)sharedSettings
{
    static dispatch_once_t once;
    dispatch_once(&once, ^{
         g_sharedSettings = [[self alloc]init];
    }
    return g_sharedSettings;
}

在上述代码中,dispatch_once函数就是由GCD提供的,它的作用是在整个应用程序生命周期中只执行一次代码块中的内容。dispatch_once能够记录该代码块是否被调用过。

 

 

Objective-C语法中的其他单例类

1.UIApplication

此类通过应用程序委托对象来响应低内存,应用启动,后台运行和应用终止等事件。

+ sharedApplication 创建

 

2.NSUserDefaults

轻量级数据存储类

+ standardUserDefaults 创建

 

3.NSNotificationCenter

采用观察者模式的通知机制

+ defaultCenter 创建

 

4.NSFileManager

提供了访问文件系统的通用操作,可以定位,创建,复制文件和文件夹

+ defaultManager 创建

 

5.NSBundle

操作本地资源,访问文件系统等功能

+ mainBundle 创建

转载于:https://www.cnblogs.com/rogertan30/p/4607899.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值