OC单例模式

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的共有的函数用于创建或获取它本身的静态私有对象。

例子:

A.h:

#import <Foundation/Foundation.h>

@interface A : NSObject

@property(assign) int b;

+(A*) getA;

-(void) funAdd;

-(void) funClear;

@end

A.m:

#import "A.h"

@implementation A

+(A*)getA

{

//    nil和NULL从字面意思来理解比较简单,nil是一个对象,而NULL是一个值,我的理解为nil是将对象设置为空,而NULL是将基本类型设置为空的。而且我们对于nil调用方法,不会产生crash或者抛出异常。

//    看一下用法

//    NSURL *url = nil;

//    Class class = Nil;

//    int *pointerInt = NULL;

//    nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空

    static A *a;

    if (a == Nil) {

        //a = [[A alloc] init];

        a = [A new];

    }

    return a;

}

-(void)funClear

{

    _b = 0;

}

-(void)funAdd

{

    _b++;

    NSLog(@"%i",_b);

}

@end

main:

#import <Foundation/Foundation.h>

#import "A.h"

int main(int argc,
const char * argv[])

{

    @autoreleasepool {

        for (int i=0; i<10; i++) {

            [[A getA]
funAdd];  //为什么只能调用一次funAdd?

            if (i == 5) {

                [[A getA]
funClear];

            }

        }

    }

    return 0;

}

结果:

2013-07-30 14:42:58.607 2013-7-29作业1[1863:303] 1

2013-07-30 14:42:58.609 2013-7-29作业1[1863:303] 2

2013-07-30 14:42:58.610 2013-7-29作业1[1863:303] 3

2013-07-30 14:42:58.610 2013-7-29作业1[1863:303] 4

2013-07-30 14:42:58.611 2013-7-29作业1[1863:303] 5

2013-07-30 14:42:58.612 2013-7-29作业1[1863:303] 6

2013-07-30 14:42:58.612 2013-7-29作业1[1863:303] 1

2013-07-30 14:42:58.613 2013-7-29作业1[1863:303] 2

2013-07-30 14:42:58.613 2013-7-29作业1[1863:303] 3

2013-07-30 14:42:58.614 2013-7-29作业1[1863:303] 4

时间: 2024-09-20 06:39:24

OC单例模式的相关文章

OC中什么是单例模式,,求解答

问题描述 OC中什么是单例模式,,求解答 能不能通俗易懂的讲一下什么是单例模式,单例模式有什么作用? 最好有个简单的小例子 解决方案 简单来说,一个程序中这样的对象只有一个,并且只能有一个. 比如说你程序中的当前用户配置,全局变量,系统中唯一的硬件和网络连接等等. 解决方案二: 例子:http://blog.sina.com.cn/s/blog_7c452219010148jo.html 解决方案三: 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可

传统设计模式(五)单例模式

这个...... 大家应该熟的不能再熟了 虫子就不班门弄斧了 private static object LockKey = new object(); private static T _Instance; public static T GetInstance() { return GetInstance(null); } public static T GetInstance(Func<T> onCreateInstance) { if (_Instance == null) { loc

iOS设计模式 - 单例模式

IOS设计模式单例类 Made By HeYang 内容大纲: 1.单例模式 2.编写严格的单例 3.利用单例模式优化本地存储 4.重写allocWithZone实现单例 5.使用异常处理强制避免init创建实例 6.MRC下的单例模式,然后宏定义抽取单例类(兼顾ARC和MRC) 7.附录 1.单例模式 单例模式的描述: 系统中的一个类只提供一个实例供外界使用. 下面举几个IOS开发中常用的几个单例: [[UIApplication sharedApplication] statusBarFra

Objective-C中的单例模式

 ​    ​单例模式算是设计模式中比较简单的一种吧,设计模式不是只针对某种编程语言,在C++, Java, PHP等其他OOP语言也有设计模式,笔者初接触设计模式是通过<漫谈设计模式>了解的.这本书中是用java写的,个人感觉拜读完这本书以后虽然有不理解的地方但还是收获蛮大的.上面提到依赖注入,控制翻转的时候,没大看懂,当学习到Strut,Spring, Hibernate的东西的时候才略懂略懂.不过在23种设计模式里面单例模式还是算比较好理解的, 那么在OC中又是怎么来表示单例模式的呢?下

使用设计模式中的Singleton单例模式来开发iOS应用程序_IOS

单例设计模式确切的说就是一个类只有一个实例,有一个全局的接口来访问这个实例.当第一次载入的时候,它通常使用延时加载的方法创建单一实例. 提示:苹果大量的使用了这种方法.例子:[NSUserDefaults standerUserDefaults], [UIApplication sharedApplication], [UIScreen mainScreen], [NSFileManager defaultManager] 都返回一个单一对象. 你可能想知道你为什么要关心一个类有多个的实例.代码

从Objective-C到Swift 单例模式

在Objective-C中经常会用到单例模式.最常见的就是: [UIApplication sharedApplication].delegate 这里的sharedApplication就是一个返回单例的方法.所谓的单例模式也就是在整个APP.或者软件中只有这个类的这么一个对象.可以保存一些全局的设置等数据,达到单例对象变了整个app的全部设置都更新的效果.  忽略OC的代码,直接进入Swift代码. 第一种单例模式的实现: class Singleton1{ class var shared

iOS单例模式

下午帮同事改了一下午的代码,深深的被刺伤了,也深深的觉得代码架构的重要性,更深深的觉得应该好好的打磨一下设计模式.于是乎就钻研一下设计模式由易到难,先从iOS最简单的单例模式说起. 作为iOS最简单的设计模式-单例模式,主要的作用是: 保证了一个类在项目中只有唯一的实例. 节约了资源,减少不必要的开支. 怎样创建一个单例? 定义一个全局变量: static Singleton * _instance =nil; 提供一个类方法接口,供外界调用: +(instancetype)shareInsta

scala实现单例模式

单例模式介绍 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例. 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:一个系统只能有一个窗口管理器或文件系统:一个系统只能有一个计时工具或ID(序号)生成器.如在Windows中就只能打开一个任务管理器.如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源:

WKWebView与Js实战(OC版)

前言 上一篇专门讲解了WKWebView相关的所有类.代理的所有API.那么本篇讲些什么呢?当然是实战了! 本篇文章教大家如何使用WKWebView去实现常用的一些API操作.当然,也会有如何与JS交互的实战. 如果还没有阅读过WKWebView精讲(OC版),请先阅读,不然有可能看不懂下面所讲的内容. 效果图 通过本篇文章,至少可以学习到: OC如何给JS注入对象及JS如何给IOS发送数据 JS调用alert.confirm.prompt时,不采用JS原生提示,而是使用iOS原生来实现 如何监