單例模式
單例模式在項目中用的比較多主要用于數據的存儲和使用;
單例設計模式有兩種寫法,第一種是不考慮線程安全的懶漢模式,第二種是考慮線程安全的“餓漢模式”,餓漢模式相對于懶漢模式來說是考慮線程安全,懶漢模式是典型的時間換空間,也就是每次獲取實例都會進行判斷,看是否需要創建實例,浪費判斷的時間。
餓漢模式:當類加載到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);
新聞熱點
疑難解答