AI智能
改变未来

IOS中的单例模式(Singleton)

单例模式的概念:保证某个类只有一个实例,并且自行实例化并向整个系统提供这个实例。

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

//.h文件

#import <Foundation/Foundation.h>

@interface Singleton :NSObject

//单例方法

+(instancetype)sharedSingleton;

@end

//.m文件

#import \”Singleton.h\”

@implementation Singleton

//全局变量

staticid _instance = nil;

+(instancetype)sharedSingleton{

    

    return [[selfalloc]init];

}

////alloc会调用allocWithZone:

+(instancetype)allocWithZone:(struct_NSZone *)zone{

    //只进行一次

    staticdispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        _instance = [superallocWithZone:zone];

    });

    return_instance;

}

-(instancetype)init

{

    staticdispatch_once_t onceToken;

    dispatch_once(&onceToken,^{

        _instance = [superinit];

    });

    return_instance;

}

-(id)copyWithZone:(NSZone *)zone

{

    return_instance;

}

  • 测试代码及结果

[/code]

#import <UIKit/UIKit.h>

#import \”Singleton.h\”

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

    @autoreleasepool {

        Singleton *s1 = [[Singletonalloc]init];

        Singleton *s2 = [SingletonsharedSingleton];

        Singleton *s3 = [[Singletonalloc]init];

        Singleton *s4 = [SingletonsharedSingleton];

        Singleton *s5 =[s4copy];

        NSLog(@\”%p,%p,%p,%p,%p\”,s1,s2,s3,s4,s5);

    }

}

运行结果

[/code]

2016-07-14 16:18:45.110 单例模式[1377:86740] 0x7ff0c1c29f40,0x7ff0c1c29f40,0x7ff0c1c29f40,0x7ff0c1c29f40,0x7ff0c1c29f40

  • 点赞
  • 收藏
  • 分享
  • 文章举报

Cassiel社长发布了1 篇原创文章 · 获赞 0 · 访问量 195私信关注

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » IOS中的单例模式(Singleton)