标签:
一、OC单例概述
在iOS开发中,单例是最有用的设计模式之一。它是在代码间共享数据而不需要手动传递参数的一种最有用的方法。
单例的好处:
(1)有的东西只能有一个,那就必须用单例;
(2)单例的好处就是不会有多余的实例,所以节约内存;
(3)因为只有一个单例,所以易于管理多线程对它的访问。
单例是一种重要的概念,它是一种极其便利的设计模式。在iPhone SDK中大量使用了单例的概念,例如,UIApplication的sharedApplication方法,任何时候都会返回一个当前应用程序的UIApplication实例。
二、代码实现
使用下列代码实现一个单例类:
MyManager.h
1 #import<foundation/Foundation.h> 2 @interfaceMyManager : NSObject 3 +(id)sharedManager; 4 5 @end
MyManager.m
1 #import"MyManager.h" 2 @implementationMyManager 3 4 +(id)sharedManager { 5 static MyManager*sharedMyManager = nil; 6 static dispatch_once_tonceToken; 7 dispatch_once(&onceToken, ^{ 8 sharedMyManager = [[self alloc] init]; 9 }); 10 return sharedMyManager; 11 } 12 @end
我们定义了一个静态变量叫做sharedMyManager,它在sharedManager方法中只会被实例化一次。通过GCD的dispath_once方法,我们确保sharedMyManager方法只会被创建一次。这是线程安全的,你无需担心什么。
但是,如果你不想用GCG,也可以这样实现sharedManager方法:
1 + (id)sharedManager { 2 @synchronized(self) { 3 if (sharedMyManager == nil) 4 sharedMyManager = [[self alloc] init]; 5 } 6 returnsharedMyManager; 7 }
这样调用单例对象:
MyManager *sharedManager = [MyManager sharedManager];
标签:
原文地址:http://www.cnblogs.com/songshuhaoNB/p/5044708.html