OC单例模式

简介:

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

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

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

例子:

A.h:

#import <Foundation/Foundation.h>

@interface A : NSObject

@property(assignint b;

+(A*) getA;

-(void) funAdd;

-(void) funClear;

@end


A.m:

#import "A.h"

@implementation A

+(A*)getA

{

//    nilNULL从字面意思来理解比较简单,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 getAfunAdd];  //为什么只能调用一次funAdd?

            if (i == 5) {

                [[A getAfunClear];

            }

        }

    }

    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

















本文转自蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366509,如需转载请自行联系原作者


相关文章
|
7月前
|
设计模式 安全
详细讲解什么是单例模式
详细讲解什么是单例模式
|
11天前
|
设计模式 安全 C#
单例模式详解
单例模式是一种常用的创建型设计模式,确保某个类只有一个实例,并提供一个全局访问点。本文详细介绍了单例模式的定义、特点、适用场景、优缺点及实现代码(C++ 和 C#),并探讨了线程安全的实现细节和与依赖注入的结合使用。
22 0
|
4月前
|
存储 设计模式 测试技术
单例模式
单例模式
|
设计模式 Java Spring
什么场景要使用单例模式,什么场景不能使用?
经常有小伙伴问我,设计模式学了这么久,每次看到概念也都能理解。但是,就是不知道怎么用,在哪里能用?我告诉大家,设计模式,不是为了要用而用的,而是作为前人总结下来的经验,等到哪天需要用的时候,你能想起来为你所用。
110 0
|
设计模式 前端开发
关于单例模式我所知道的
关于单例模式我所知道的
65 0
关于单例模式我所知道的
|
安全 Java
原来要这么实现单例模式
原来要这么实现单例模式
60 0
|
设计模式 缓存 JSON
没那么简单的单例模式
没那么简单的单例模式
131 0
没那么简单的单例模式
|
存储 安全 调度
单例模式的简单介绍
单例模式的简单介绍
|
设计模式 安全 前端开发
关于单例模式,你应该了解这些
关于单例模式,你应该了解这些
关于单例模式,你应该了解这些
|
设计模式 安全 Java
回顾一下单例模式
回顾一下单例模式
124 0