首页 > 代码库 > IOS中的单例模式

IOS中的单例模式

单例模式在所有的面向对象的语言中都有哦涉及到,相信做为一个程序员的你,绝对不会陌生!
单例是指静态分配的实例,就是只开辟一块内存,不会重新开辟内存,这样就节省了内存!
单列模式的好处在这里不多讲了,这里主要介绍单列模式的完整实现:

在objective-c中要实现一个单例类,至少需要做以下四个步骤
  1、为单例对象实现一个静态实例,并初始化,然后设置成nil,
  2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,
  3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,
  4、适当实现allocWitheZone,copyWithZone,release和autorelease。


下面以SurveyRunTimeData为例子:

 

static SurveyRunTimeData *sharedObj = nil; //第一步:静态实例,并初始化。
@implementation SurveyRunTimeData

  • (SurveyRunTimeData*) sharedInstance //第二步:实例构造检查静态实例是否为nil
    {
    @synchronized (self)
    {

    if (sharedObj == nil)
    {
        [[self alloc] init];
    }

    }
    return sharedObj;
    }

  • (id) allocWithZone:(NSZone *)zone //第三步:重写allocWithZone方法
    {
    @synchronized (self) {

    if (sharedObj == nil) {
        sharedObj = [super allocWithZone:zone];
        return sharedObj;
    }

    }
    return nil;
    }

  • (id) copyWithZone:(NSZone *)zone //第四步
    {
    return self;
    }

  • (id) retain
    {
    return self;
    }

  • (unsigned) retainCount
    {
    return UINT_MAX;
    }

  • (oneway void) release
    {

}

  • (id) autorelease
    {
    return self;
    }

  • (id)init
    {
    @synchronized(self) {

    [super init];//往往放一些要初始化的变量.
    return self;

    }
    }

@end