单例

来源:互联网 发布:南京cnc编程招聘 编辑:程序博客网 时间:2024/04/30 10:29

概念:意思是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。属于面向对象23种设计模式中常用的一种,主要用于做应用程序的资源共享控制。意味着:

1.在程序声明周期里 有且仅有 被实例化过一次。
2.调用的时候为确保实例化的唯一,直接利用类(static)方法来生成和访问对象。

3.可以在程序中任何地方访问它,因为只实例化唯一的一次,所以,并不用 alloc、init、autorelease初始化方法

使用场景或者说优点:在整个整个游戏中,我们只想让一个DataModel对象存在

在程序中,需要一系列的对象,他们每一个内部都包含有一组变量和功能,是静态的,而且整个程序都只需要拥有一个该类的对象。比如程序中需要去共享一系列的变量和功能,但是我并不想实例化多个对象。
    例如:
    1.控制程序执行的命令器
    2.管理数据库
    3.音效控制
    4.文件处理

例子:

.h:

@interface DataModel : NSObject <NSCoding> {
.....
}

.m:

static DataModel *_sharedContext = nil;
//实现一个静态实例,并初始化,然后设置成nil;

//实现一个实例构造方法 (通常命名为 sharedxxx) 检查上面声明的静态实例是否为nil,如果是,则新建并返回一个本类实例;
+(DataModel*)getModel
{
        @synchronized(self) {//保证线程安全,在多个线程使用时不会创建多个对象
        if (!_sharedContext) {
            _sharedContext = [[self alloc] init];
        }   
         }
    
    return _sharedContext;
}