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 创建

时间: 2024-10-09 17:24:02

iOS语言中的单例模式的相关文章

Go语言中的单例模式

单例模式 使用单例的目的是为了保证在整个系统中存在唯一的实例 package main import ( "fmt" "sync" ) type IntAndString struct { num int32 str string } var m *IntAndString var once sync.Once func GetInstance() *IntAndString { once.Do(func() { m = &IntAndString{num:

iOS语言中的代理模式

什么是代理,为什么需要代理? 当某一个类或者试图控制器需要完成某些“动作”,但是却需要另一个类或者视图控制器作为其动作的载体. 实际应用中的单例 比如当左侧滑栏leftViewController上有用户登录后显示的头像,点击头像会进入用户设置页面.而用户设置页面实际是需要从rootViewController push进入的.所以当用户点击左侧滑栏leftViewController上的用户头像时,需要左侧滑栏的代理rootViewController去执行创建用户设置页面并弹入的这一系列操作

[iOS]如何在iOS开发中切换显示语言实现国际化

1.在Project设置,添加中英两种语言: 2.新建Localizable.strings文件,作为多语言对应的词典,存储多种语言,点击右侧Localization,勾选中英: 3.添加一个字段, 在English中,添加:"SUBMIT_BTN_TITLE" = "Go"; 在Chinese中,添加:"SUBMIT_BTN_TITLE" = "开始"; 4.一个工具类GDLocalizableController,用来切换

在ios中使用单例模式编程

本文转载至 http://blog.csdn.net/remote_roamer/article/details/7107007 1.    @implementation Singleton    2.         3.    + (Singleton *)instance  {    4.            static Singleton *instance;    5.               6.            @synchronized(self) {    7.

IOS成长中-C语言-数据类型(第一天)

定义常量分三部分:数据类型 变量名 = 初值    定义整型变量       变量名的命名规则:        1.变量名只能由数字,字母,下划线组成,并且数字不能开头.        2.不能和系统关键字重名.        3.具有自解释性,见名知意.        4.变量名不能重复.        5.变量名由多个单词组成时,除了首个单词首字母小写外,其他的单词首字母都要大写     int a = 10;     float b = 1.0;//用于注释一行.     char a =

iOS中的单例模式

单例模式的优点: 由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁地创建.销毁时,而且创建或销毁时性能又无法优化,单例模式的优势就非常明显了. 由于单例模式只生成一个实例,所以减少了系统的性能开销,当一个对象的产生需要比较多的资源时,如读取配置.产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后用永久驻留内存的方式来解决. 单例模式可以避免对资源的多重占用,例如一个写文件动作,由于只有一个实例存在内存中,避免对同一个资源文件的同时写操作. 单例模式可以在

iOS.常用设计模式.01.单例模式

使用单例模式的类: UIApplication UIAccelerometer NSUserDefaults NSNotificationCenter NSFileManager NSBundle等 Singleton.h #import <Foundation/Foundation.h> @interface Singleton : NSObject // 始终返回同一个Singleton的指针 + (Singleton *)sharedManager; @property (strong,

如何让自己成为iOS面试中的佼佼者?

什么样的员工最受企业欢迎?有人一直在努力提升自己,成为受企业欢迎的员工,然而,我们应该往哪些方向去提升自己呢?100家知名企业今年来iOS面试题合集,你要的这里都有,企业要的这里也有,从基础开始到进阶.深入底层,整理出188个大纲,干货太足,每个题目都会有相对的答案,由于字数太多所以我整理出一个文档,文档获取地址,加入iOS开发交流群:714042473免费获取.大纲展示:1.swift和oc的区别2.编译链接3.synthesize & denamic4.在项目开发中常用的开发工具有哪些?5.

iOS开发中多线程基础

耗时操作演练 代码演练 编写耗时方法 - (void)longOperation { for (int i = 0; i < 10000; ++i) { NSLog(@"%@ %d", [NSThread currentThread], i); } } 直接调用耗时方法 // 1> 直接调用耗时方法 [self longOperation]; 运行測试效果 在后台运行耗时方法 // 2> 在后台运行耗时方法 [self performSelectorInBackgro