iOS开发之单l例模式(Singleton)

来源:互联网 发布:ubuntu mysql my.cnf 编辑:程序博客网 时间:2024/06/05 15:27

一、什么是单利?

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

    作用:单例模式的使用场合:在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次),应该让这个类创建出来的对象永远只有一个。

 (一)单利的创建

习惯上单例以下面三个单词开头

sharedXXXX        defaultXXX               currentXXX

<pre name="code" class="objc"><pre name="code" class="html"><span style="font-size:18px;">static id sharedManager;+ (id)sharedThemeManager{    if (sharedManager == nil) {        // 第一次进入调用 把sharedManafer存于全局变量中        sharedManager = [[self alloc]init];    }        // 第2次 第3次 。。。。 都会使用第一次创建好的变量    return sharedManager;}</span>

(二)单例的运用

  ShareThem *sm1 = [ShareThem sharedThemeManager];    ShareThem *sm2 = [ShareThem sharedThemeManager];    NSLog(@"%@,%@",sm1,sm2);
//两次打印,地址相同// <ShareThem: 0x7fc65b53b550>,<ShareThem: 0x7fc65b53b550>
(三)单例的各种写法

////2. 加锁的写法 防止多个线程同时走alloc方法//static id sharedManager;//+ (id)sharedThemeManager{//    @synchronized(self){ // 这段代码,如果多个线程进入这段代码,只允许走一个线程//    if (sharedManager == nil) {//        // 第一次进入调用 把sharedManafer存于全局变量中//        sharedManager = [[self alloc]init];//    }//}//    // 第2次 第3次 。。。。 都会使用第一次创建好的变量//    return sharedManager;//}
// 3.GCD写法//  static id sharedManager;//+ (id)sharedThemeManager//{//    static dispatch_once_t onceToken;//    dispatch_once(&onceToken, ^{//        sharedManager = [[self alloc]init];//    });//    return sharedManager;//}
单例的全面写法(一般时只要保证用类方法,就不用写了)

+ (id)allocWithZone:(struct _NSZone *)zone{    // alloc 会用    return [[self sharedThemeManager] retain];}+ (id) copyWithZone:(struct _NSZone *)zone{    return self;}- (id)retain{    return self;}- (oneway void)release{    }- (NSUInteger)retainCount{    return UINT_MAX;}- (id)autorelease{    return self;}




0 0
原创粉丝点击