美文网首页
iOS开发 - 项目必备的用户单例

iOS开发 - 项目必备的用户单例

作者: 阿唯不知道 | 来源:发表于2018-05-27 22:41 被阅读0次

    只要是涉及到用户登录的项目,单例是必不可少的,你的单例设计的合理吗?

    传说中的单例

    以下是我的用户单例: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
    

    相关文章

      网友评论

          本文标题:iOS开发 - 项目必备的用户单例

          本文链接:https://www.haomeiwen.com/subject/xtbijftx.html