.h
#import <Foundation/Foundation.h>
#import "ZJBModel.h"#import "AutoCoding.h"
/* 某个用户 (自己/别人) */
@interface UserModel : ZJBModel <NSCoding, NSCopying>
/* 命名方式 OC/Java都是遵守驼峰原则/波浪命名方法
在PHP, Linux里面命名是按照 _ 隔开 全小写命名
*/
@property (nonatomic, strong) NSString *username;
@property (nonatomic, strong) NSString *password;
@property (nonatomic, strong) NSString *address; /* 和 address 对应 */
@property (nonatomic, strong) NSString *birthday;
@property (nonatomic, strong) NSString *clientType; /* 和 client_type 对应 */
@property (nonatomic, strong) NSString *createTime; /* 和 create_time 对应 */
@property (nonatomic, strong) NSString *deviceModel;
@property (nonatomic, strong) NSString *deviceToken;
@property (nonatomic, strong) NSString *headerImg;
@property (nonatomic, strong) NSString *id;
@property (nonatomic, strong) NSString *ip;
@property (nonatomic, strong) NSString *lastLoginTime; /* last_login_time */
@property (nonatomic, assign) double lbsLat;
@property (nonatomic, assign) double lbsLong;
@property (nonatomic, strong) NSString *nickname;
@property (nonatomic, strong) NSString *osVersion;
@property (nonatomic, strong) NSString *sex;
@property (nonatomic, strong) NSString *token;
@property (nonatomic, strong) NSString *jid;
@property (nonatomic, strong) NSString *demo;
// 表示自己当前用户 单例
+ (id) currUser;
// 保存当前用户myself
+ (void) saveMyself;
// 恢复当前用户
+ (id) restoreMyself;
+ (BOOL) isExistMyself;
+ (void) deleteSaveMyself;
// 把对象self拷贝到target对象中
- (id) copyToObject:(id)target;
@end
#define myself ((UserModel *)[UserModel currUser])
.m
#import "UserModel.h"
@implementation UserModel
static UserModel *um;
+ (id) currUser {
if (um == nil)
um = [[UserModel alloc] init];
return um;
}
#pragma mark - 使用AutoCoding自动进行归档
static inline NSString * myselfSaveFile() {
return [NSHomeDirectory() stringByAppendingString:@"/Library/Caches/myself"];
}
+ (void) saveMyself {
NSString *path = myselfSaveFile();
// 使用自动归档开源库 直接把对象写入到文件中
[myself writeToFile:path atomically:YES];
}
// 恢复当前用户
+ (id) restoreMyself {
NSString *path = myselfSaveFile();
// 从path路径找到并解档案
UserModel *um = [self objectWithContentsOfFile:path];
return um;
}
+ (BOOL) isExistMyself {
NSString *path = myselfSaveFile();
id obj = [self objectWithContentsOfFile:path];
if ([obj isKindOfClass:[self class]]) {
return YES;
}
return NO;
}
+ (void) deleteSaveMyself {
NSString *path = myselfSaveFile();
[[NSFileManager defaultManager] removeItemAtPath:path error:nil];
}
#pragma mark - 自动实现了拷贝NSCopying功能(NSZone申请的内存空间)
//codableProperties 获取当前对应的属性和属性值,并把相应的属性和属性值,存入到model中,实现自动归档
- (id)copyWithZone:(NSZone *)zone {
UserModel *copy = [[[self class] allocWithZone:zone] init];
for (NSString *key in [self codableProperties]) {
[copy setValue:[self valueForKey:key] forKey:key];
}
return copy;
}
// 把self存于target对象中
- (id) copyToObject:(id)target {
for (NSString *key in [self codableProperties]) {
[target setValue:[self valueForKey:key] forKey:key];
}
return target;
}