单例模式
单例模式在项目中用的比较多主要用于数据的存储和使用;
单例设计模式有两种写法,第一种是不考虑线程安全的懒汉模式,第二种是考虑线程安全的“饿汉模式”,饿汉模式相对于懒汉模式来说是考虑线程安全,懒汉模式是典型的时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。
饿汉模式:当类加载到OC运行时环境中(内存),就会调用+ (void)load一次(一个类只会加载1次)
懒汉模式:每调用一次就会加载;
iOS4之后项目中使用饿汉模式较多
项目中常用到主要有五种类型的数据 NSNumber,NSMutableDictionary,NSString,BOOL,NSInteger
#define USE_INFO [Singleton shareInstance]
#import <Foundation/Foundation.h>
@interface Singleton : NSObject
@property (atomic, strong) NSNumber *logined;
@property (atomic) NSInteger timeOut;
@property (nonatomic, retain) NSMutableDictionary *userItems;
@property (atomic, assign) BOOL isEle;
@property (nonatomic, strong) NSString *username;
//单例实例化
+ (instancetype)shareInstance;
@end
#import "Singleton.h"
static Singleton *bankUser = nil;
@implementation Singleton
#pragma mark - init with singleton
//饿汉模式
//+ (instancetype)shareInstance
//{
static Singleton *bankUser = nil;
// static dispatch_once_t onceToken;
//
// dispatch_once(&onceToken, ^{
// bankUser = [[Singleton alloc]init];
// bankUser -> _userItems = [NSMutableDictionary dictionary];
// bankUser -> _timeOut = 0;
// bankUser -> _logined = [NSNumber numberWithBool:NO];
// bankUser -> _username = @"";
// bankUser -> _isEle = NO;
//
// });
//
// return bankUser;
//}
/*懒汉模式*/
+ (instancetype)shareInstance
{
@synchronized (self)
{
if (bankUser == nil)
{
bankUser = [[self alloc] init];
bankUser -> _userItems = [NSMutableDictionary dictionary];
}
}
return bankUser;
}
@end
调用取值如下:
USE_INFO.username = @"ssdddf";
USE_INFO.logined = @1;
[USE_INFO.userItems setObject:@"usernumber" forKey:@"usernumber"];
USE_INFO.isEle = YES;
USE_INFO.timeOut = 1;
NSLog(@"username==%@ logined==%@userItems==%@isEle=%dtimeOut==%ld",USE_INFO.username,USE_INFO.logined,[USE_INFO.userItems objectForKey:@"usernumber"],!USE_INFO.isEle,(long)USE_INFO.timeOut);