ios 归档解档

.h文件

#import <Foundation/Foundation.h>

typedef void(^myBlock)(NSData *);

typedef NS_ENUM(NSInteger, CYLGender){
    CYLGenderMail,
    CYLGenderFemale
};

@interface User : NSObject<NSCopying,NSMutableCopying, NSCoding>
{
    unsigned int count;
}

@property (nonatomic, readwrite, copy) NSString *name;
@property (nonatomic, readwrite, assign) NSUInteger age;
@property (nonatomic, readwrite, assign) CYLGender gender;

@end

.m文件

#import "User.h"
#import <objc/runtime.h>

@interface User()

@end
@implementation User @synthesize firstName = _firstName; @synthesize lastName = _lastName; - (instancetype)init { self = [super init]; if (self) { } return self; } - (instancetype)initWithName:(NSString *)name age:(NSUInteger)age gender:(CYLGender)gender { self = [super init]; if (self) { _name = name; _age = age; _gender = gender; } return self; } - (void)addFriend:(User *)user { [_friends addObject:user]; } - (void)removeFriend:(User *)user { [_friends removeObject:user]; } - (id)copyWithZone:(NSZone *)zone { User *copy = [[[self class] allocWithZone:zone] initWithName:_name age:_age gender:_gender]; copy -> _friends = [_friends mutableCopy]; return copy; } - (id)deepCopy { User *copy = [[[self class] alloc] initWithName:_name age:_age gender:_gender]; copy -> _friends = [[NSMutableSet alloc] initWithSet:_friends copyItems:YES]; return copy; } - (id)mutableCopyWithZone:(NSZone *)zone { User *copy = [[[self class] allocWithZone:zone] initWithName:_name age:_age gender:_gender]; copy -> _friends = [_friends mutableCopy]; return copy; } #pragma mark - 解档 - (instancetype)initWithCoder:(NSCoder *)aDecoder { unsigned int outCount; if (self == [super init]) { objc_property_t * objs = class_copyPropertyList([self class], &outCount); for (int i =0; i < outCount; i++) { objc_property_t obj = objs[i]; NSString *name = [NSString stringWithUTF8String:property_getName(obj)]; id value = [aDecoder decodeObjectForKey:name]; [self setValue:value forKey:name]; } free(objs); // Ivar *ivars = class_copyIvarList([self class], &outCount); // for (int i =0; i < outCount; i ++) { // Ivar ivar = ivars[i]; // NSString *keyName = [NSString stringWithUTF8String:ivar_getName(ivar)]; // id value = [aDecoder decodeObjectForKey:keyName]; // [self setValue:value forKey:keyName]; // } // free(ivars); } return self; } #pragma mark - 归档 - (void)encodeWithCoder:(NSCoder *)aCoder { unsigned int outCount; objc_property_t *objcs = class_copyPropertyList([self class], &outCount); for (int i=0; i<outCount; i++) { objc_property_t objc = objcs[i]; NSString *name = [NSString stringWithUTF8String:property_getName(objc)]; id value = [self valueForKey:name]; [aCoder encodeObject:value forKey:name]; } free(objcs); // Ivar *ivars = class_copyIvarList([self class], &outCount); // for (int i =0; i <outCount; i++) { // Ivar ivar = ivars[i]; // NSString *keyName = [NSString stringWithUTF8String:ivar_getName(ivar)]; // if ([keyName isEqualToString:[self ignoreParameter]]) { // continue; // } // id value = [self valueForKey:keyName]; // [aCoder encodeObject:value forKey:keyName]; // } // free(ivars);
}

  

转载于:https://www.cnblogs.com/caicaige/p/7928208.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值