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

 单例模式

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

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

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



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值