首页 > 系统 > iOS > 正文

十八,iOS设计模式之单例模式

2019-11-08 00:16:11
字体:
来源:转载
供稿:网友

 单例模式

单例模式在项目中用的比较多主要用于数据的存储和使用;

单例设计模式有两种写法,第一种是不考虑线程安全的懒汉模式,第二种是考虑线程安全的“饿汉模式”,饿汉模式相对于懒汉模式来说是考虑线程安全,懒汉模式是典型的时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。

饿汉模式:当类加载到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);


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表