iOS中单例类的构建

来源:互联网 发布:数组中重复次数最多的 编辑:程序博客网 时间:2024/05/22 02:25

    单例类,指在项目中某个类只有一个实例对象可以被外界访问到。最初的应用是在项目中构建一个数据库的管理类,因为多个界面会较频繁的访问到数据库,如果某一个地方进行了操作更新了数据,跳转到另一个页面的时候访问,如果不使用单例,那么就需要把数据传过去,这样在需求数据的页面多了之后就很乱。如果使用单例,就会有一个整个项目都能访问到的对象,而且任何时候做出修改,在其他地方访问都是已修改的。对于操作频繁但是却只需要一个的这种角色,可是尝试使用单例模式构建。

   看了一些其他的文章,里面会说到关于对其他构建对象方式的限制,如:点击打开链接,使得不管用什么方法构建都是那一个对象,我觉得其实不是很必要,稍微熟悉了单例构建,当你想构建单例对象的时候,就会去调用shareXXX或者defultXXX方法,除非你不想使用单例,才去调用alloc\init,copy之类的方法。在不限制其他构建对象方法的情况下,使用者可以构建很多的对象,但如果你想使用单例,你就不会去调用那些方法。

   1、使用staic 关键词构建:

+(id)shareInstance{

    static singleObject *shareObject = nil;

    @synchronized(self){

        if (shareObject==nil) {

            shareObject = [[singleObjectalloc]init];

        }

    }

    return shareObject;

}

@synchronized(self)是个线程锁,保证在多线程情况时,里面的代码同时只有一个再执行。而根据static关键词的属性,shareObject指针不会再被声明,只会被复制,在第一次构建后,它不再是nil,以致之后再调用这个方法时

 if (shareObject==nil) {

            shareObject = [[singleObject alloc]init];

        }

里面不会再被执行,都会返回第一次构建的对象。使用shareInstance构建的对象为同一个。

2、使用dispatch_once:

+(id)shareInstance{

    static singleObject *shareObject = nil;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        shareObject = [[singleObjectalloc]init];

    });

    return shareObject;

}

dispatch_once保证里面的代码只执行一次,而且线程安全。shareObject使用static修饰,保证在第一次之后,shareObject都指向同一个内存地址。


0 0
原创粉丝点击