一:要想使对象可以直接存储,首先要遵循NSCoding协议
@interface Person : NSObject
@property NSString *title;
@property NSString *author;
@property NSUInteger pageCount;
@property NSSet*categories;
@property (getter= isAvailable) BOOL available;
@end
@implementationPerson
- (id)initWithCoder:(NSCoder*)decoder {
self= [super init];
if(!self) {
return nil;
}
self.title= [decoder decodeObjectForKey:@"title"];
self.author= [decoder decodeObjectForKey:@"author"];
self.pageCount= [decoder decodeIntegerForKey:@"pageCount"];
self.categories= [decoder decodeObjectForKey:@"categories"];
self.available= [decoder decodeBoolForKey:@"available"];
return self;
}
- (void)encodeWithCoder:(NSCoder*)encoder {
[encoder encodeObject:self.title forKey:@"title"];
[encoder encodeObject:self.author forKey:@"author"];
[encoder encodeInteger:self.pageCount forKey:@"pageCount"];
[encoder encodeObject:self.categories forKey:@"categories"];
[encoder encodeBool:[self isAvailable] forKey:@"available"];
}
创建需要archiver的对象
Person *p = [[Person alloc] init];
p.title = @"蒙奇 D 路飞";
p.author=@"test1";
p.pageCount=1;
p.categories = [NSSet setWithObjects:@"a", @"b", nil];
p.available=YES;
NSString *home = NSHomeDirectory();
home = [home stringByAppendingPathComponent:@"test.txt"];
//存储数据
BOOL res = [NSKeyedArchiver archiveRootObject:p toFile:home];
//获取数据
Persion *p1 = [NSKeyedUnarchiver unarchiveObjectWithFile:home];
//存储数据
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:p];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"person"];
//获取数据
NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"person"];
Person *person = [NSKeyedUnarchiver unarchiveObjectWithData:data];
二:对象具有copy功能
person.h,person.m如下
@interface Person : NSObject<NSCopying>
@property (nonatomic, assign) NSInteger age;
@property (nonatomic, copy) NSString *name;
@end
@implementation Person
- (id)copyWithZone:(NSZone*)zone {
Person *person = [[[self class] allocWithZone:zone] init];
person.age = self.age;
person.name = self.name;
return person;
}
@end
控制器里边测试如下:
Person *person = [[Person alloc]init];
person.age = 10;
person.name = @"name";
Person*person1 = [person copy];
person1.age=11;
person1.name=@"name1";
NSLog(@"person.age==%ld", person.age);//person.age==10
NSLog(@"person.name==%@", person.name);//person.name==name
NSLog(@"person1.age==%ld", person1.age);//person1.age==11
NSLog(@"person1.name==%@", person1.name);//person1.name==name1
网友评论