技术文章分类(180)

技术随笔(11)

ios设计模式之单例模式

 

单例(单态)模式
单例设计模式确保对于一个给定的类只有一个实例存在,这个实例有一个全局唯一的访问点。它通常采用懒加载的方式在第一次用到实例的时候再去创建它。
注意:苹果大量使用了此模式。例如:[NSUserDefaults standardUserDefaults],[UIApplication sharedApplication], [UIScreen mainScreen], [NSFileManager defaultManager],所有的这些方法都返回一个单例对象。
 
你很可能会想为什么这么关心是否一个类有多个实例?毕竟代码和内存都是廉价的,对吗? 
有一些情况下,只有一个实例显得非常合理。举例来说,你不需要有多个Logger的实例,除非你想去写多个日志文件。或者一个全局的配置处理类:实现线程安全的方式访问共享实例是容易的,比如一个配置文件,有好多个类同时修改这个文件。
 
自定义一个单例类interfaceLibraryAPI
@interfaceLibraryAPI : NSObject  
   
+ (LibraryAPI*)sharedInstance;  
   
@end  

 

+ (LibraryAPI*)sharedInstance  
{  
    // 1  
    static LibraryAPI *_sharedInstance = nil;  
   
    // 2  
    static dispatch_once_t oncePredicate;  
   
    // 3  
    dispatch_once(&oncePredicate, ^{  
        _sharedInstance = [[LibraryAPI alloc] init];  
    });  
    return _sharedInstance;  
}  
在这个简短的方法中,有一些需要需要注意的点:
1.声明一个静态变量去保存类的实例,确保它在类中的全局可用性。
2.声明一个静态变量dispatch_once_t ,它确保初始化器代码只执行一次
3.使用Grand Central Dispatch(GCD)执行初始化LibraryAPI变量的block.这  正是单例模式的关键:一旦类已经被初始化,初始化器永远不会再被调用。
下一次你调用sharedInstance的时候,dispatch_once块中的代码将不会执行(因为它已经被执行了一次),你将得到原先已经初始化好的实例。 
 
 
 
posted @ 2014-07-23 10:33  坤哥MartinLi  阅读(245)  评论(0编辑  收藏  举报