单例模式
单例模式在项目中用的比较多主要用于数据的存储和使用;
单例设计模式有两种写法,第一种是不考虑线程安全的懒汉模式,第二种是考虑线程安全的“饿汉模式”,饿汉模式相对于懒汉模式来说是考虑线程安全,懒汉模式是典型的时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。
饿汉模式:当类加载到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);
新闻热点
疑难解答