需求:oc如何实现单例模式
.h文件
#import <Foundation/Foundation.h>
@interface SingletonObject : NSObject
+(SingletonObject *)getInstance;
@end
.m文件
#import "SingletonObject.h"
@implementation SingletonObject
+(SingletonObject *)getInstance{
static SingletonObject *instance = nil;
static dispatch_once_t once_token = 0;
dispatch_once(&<span style="font-family: Arial, Helvetica, sans-serif;">once_token</span>, ^{
instance = [[super allocWithZone:NULL]init];
});
return instance;
}
+ (id)allocWithZone:(struct _NSZone *)zone{
return [self getInstance];
}
@end
测试代码main.m 文件
#import <Foundation/Foundation.h>
#import "SingletonObject.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
SingletonObject *obj1 = [SingletonObject getInstance];
NSLog(@"obj1=%@",obj1);
SingletonObject *obj2 = [SingletonObject getInstance];
NSLog(@"obj1=%@",obj2);
SingletonObject *obj3 = [[SingletonObject alloc]init];
NSLog(@"obj1=%@",obj3);
SingletonObject *obj4 = [[SingletonObject allocWithZone:nil]init];
NSLog(@"obj1=%@",obj4);
NSLog(@"%d,%d,%d",obj4==obj3,obj3==obj2,obj2==obj1);
}
return 0;
}
参考网址:
http://sjpsega.com/blog/2014/05/25/singleton-in-ios/
demo源码: