单例模式就是一个类在系统中最多只有一个实例对象,并通过一个全局的入口对这个实例对象进行访问。
对于共享的资源,实现多个对象去封装是不必要的,不光占用系统资源,还有可能造成冲突,所以一般使用单例模式。
#import "DSSingletonObject.h"
@implementation DSSingletonObject
+ (DSSingletonObject *)defaultObject {
static DSSingletonObject *defaultObjectInstance = nil;
if (!defaultObjectInstance)
defaultObjectInstance = [[super allocWithZone:NULL] init];
return defaultObjectInstance;
}
+ (id)allocWithZone:(struct _NSZone *)zone {
return [self defaultObject];
}
@end
#import <Foundation/Foundation.h>
@interface DSSingletonObject : NSObject
// 写法一
+ (instancetype)defaultObject;
// 写法二:线程安全,iOS4之后常用这种
+ (DSSingletonObject *)sharedObject;
@end
int main(int argc, const char * argv[])
{
DSSingletonObject *obj = [DSSingletonObject defaultObject];
NSLog(@"%p", obj);
DSSingletonObject *obj2 = [[DSSingletonObject alloc] init];
NSLog(@"%p", obj2);
DSSingletonObject *obj3 = [[DSSingletonObject alloc] init];
NSLog(@"%p", obj3);
return 0;
}