只要是涉及到用户登录的项目,单例是必不可少的,你的单例设计的合理吗?
![](https://img.haomeiwen.com/i2822163/667b3911da899f41.png)
以下是我的用户单例:YSUserModel
1、先看 YSUserModel.h
文件
/**
* 用户模型(单例)
*/
#import <Foundation/Foundation.h>
@interface YSUserModel : NSObject
/** 用户token令牌 */
@property (nonatomic, copy) NSString *token;
/** 用户id */
@property (nonatomic, copy) NSString *id;
/** 用户名 */
@property (nonatomic, copy) NSString *username;
/** 登录密码 */
@property (nonatomic, copy) NSString *password;
/** 用户头像 */
@property (nonatomic, copy) NSString *avatar;
/** 手机号码 */
@property (nonatomic, copy) NSString *phone;
/** 用户角色(如教师、家长) */
@property (nonatomic, assign) NSInteger userType;
/** 是否已登录 */
@property (nonatomic, assign) BOOL isLogin;
/**
* 单例初始化
*/
+ (YSUserModel *)shareInstance;
/**
* 重置单例
*/
+ (void)resetUuserModel;
/**
* 清除本地的所有用户数据
*/
+ (void)clearLocalUserModel;
/**
更新本地的用户数据
@param user 传入用户模型
*/
+ (void)updateLocalUserModel:(YSUserModel *)user;
/**
* 加载本地的用户模型
*/
+ (YSUserModel *)loadLocalUserModel;
@end
2、再看 YSUserModel.m
文件
#import "YSUserModel.h"
// 引入YYModel(字典、数组等与模型互转)
//#import "NSObject+YYModel.h"
#pragma mark - ==================数据本地化===========================
#define kUserDefaults [NSUserDefaults standardUserDefaults]
//立即同步到文件
#define kSynchronize [[NSUserDefaults standardUserDefaults] synchronize];
static dispatch_once_t onceToken;
static YSUserModel *userModel = nil;
static NSString *keyName = @"YSUserModel";
@implementation YSUserModel
// 单例初始化
+ (YSUserModel *)shareInstance
{
dispatch_once(&onceToken, ^{
userModel = [[super allocWithZone:NULL] init] ;
});
return userModel;
}
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
return [YSUserModel shareInstance];
}
- (id)copyWithZone:(struct _NSZone *)zone
{
return [YSUserModel shareInstance] ;
}
// 重置单例
+ (void)resetUuserModel
{
onceToken = 0;
userModel = nil;
}
// 清除本地的所有用户数据
+ (void)clearLocalUserModel {
// 把登录状态置为NO
// 重置用户单例
[YSUserModel resetUuserModel];
// 清空用户本地化缓存的数据
[kUserDefaults removeObjectForKey:keyName];
[kUserDefaults synchronize];
}
#pragma mark - * * * * * 下面两个方法需要需要引入 YYModel 方能使用 * * * * *
//// 更新本地的用户数据
//+ (void)updateLocalUserModel:(YSUserModel *)user
//{
// // 将用户模型转换成json数据
// NSData *data = [user modelToJSONData];
// // 将用户数据存储到本地
// [kUserDefaults setObject:data forKey:keyName];
// // 立即同步到文件
// kSynchronize;
//}
//
//// 加载本地的用户模型
//+ (YSUserModel *)loadLocalUserModel {
// NSData *data = [kUserDefaults objectForKey:keyName];
// if (!data) {
// return nil;
// }
// return [YSUserModel modelWithJSON:data];
//}
@end
![](https://img.haomeiwen.com/i2822163/23eb59c7072548bb.png)
网友评论