单例模式是iOS中常用的一种模式。单例设计模式的作用是使得这个类的一个对象成为系统中的唯一实例,因此需要用一种唯一的方法去创建这个对象并返回这个对象的地址。对于什么时候要创建单例,1.类只能有一个实例 2.唯一实例在哪里运用,就在哪里调用
创建单例的第一种方法,也是常用的方法:(1)
- static
AccountManager *DefaultManager = nil; -
- +
(AccountManager *)defaultManager { -
-
@synchronized(self) { // 用到了关键字@synchronized是为了保证我们的单例的线程级别的安全 -
-
if (!DefaultManager) { -
DefaultManager = [[self allocWithZone:NULL] init]; - }
-
return DefaultManager; - }
- +
(AccountManager *)sharedManager - {
-
static AccountManager *sharedAccountManagerInst ance = nil; -
static dispatch_once_t predicate; -
dispatch_once(&predicate, ^{ -
sharedAccountManagerInst ance = [[self alloc] init]; -
}); -
return sharedAccountManagerInst ance; - }
下面是网络上的一些关于单例的创建
- @implementation Singleton
- static Singleton * sharedSingleton = nil;
- + (Singleton *) sharedInstance
- {
- if (sharedSingleton == nil) {
- sharedSingleton = [[super allocWithZone:NULL] init];
- }
- return sharedSingleton;
- }
- + (id) allocWithZone:(struct _NSZone *)zone
- {
- return [[self sharedInstance] retain];
- }
- - (id) copyWithZone:(NSZone *) zone
- {
- return self;
- }
- - (id) retain
- {
- return self;
- }
- - (NSUInteger) retainCount
- {
- return NSUIntegerMax;
- }
- - (void) release
- {
- //
- }
- - (id) autorelease
- {
- return self;
- }
- @end