NSUserDefault

来源:互联网 发布:为知笔记 知乎 编辑:程序博客网 时间:2024/04/27 19:19
</pre><pre name="code" class="objc"><pre name="code" class="objc">//    NSUserDefaults类提供了一个与默认系统进行交互的编程接口,//    NSUserDefaults对象是用来保存,恢复应用程序相关的偏好设置,配置数据等。//    默认系统允许应用程序自定义它的行为去迎合用户的喜好,//    可以在程序运行的时候从用户默认的数据库中读取程序的设置,比如主题偏好设置等//    同时NSUserDefaults的缓存避免了在每次读取数据时候都打开用户默认数据库的操作,可以通过调用synchronize方法来使内存中的缓存与用户默认系统进行同步。//    一个NSUserDefaults类的对象必须是属性表//我们可以存储NSData NSString NSNumber NSDate NSArray NSDictionary 这些实例// 如果我们想存储其他类型的对象,需要归档并创建一个NSData来实现存储。       // 1. 存储    /*    NSString *password = @"helloworld";    [[NSUserDefaults standardUserDefaults] setObject:password forKey:@"password"];    [[NSUserDefaults standardUserDefaults] synchronize];     */    // 2. 获取//    NSString *password = [[NSUserDefaults standardUserDefaults] objectForKey:@"password"];//    NSLog(@"password : %@",password);//    2015-08-26 13:32:35.027 NSUserDefault[7986:303] password : helloworld    //     ----//     从上面的例子得到了结论,只需要将需要存储的数据给NSUserDefaults 然后调用同步方法,再次启动程序,就可以获取NSUserDefaults的数据。            //    使用 NSUserDefaults 存储自定义对象    // Student ,我们需要将Student类型变为NSData类型 就必须实现归档 自定义对象实现归档必须遵循NSCoding协议。    //    Student *student = [[Student alloc] init];//    student.name = @"Charles";//    student.studentNumber = @"12110501007";//    student.sex = @"man";//    // 归档方法////    + (NSData *)archivedDataWithRootObject:(id)rootObject;//    // 1. 存储//    /*//     NSData *data = [NSKeyedArchiver archivedDataWithRootObject:student];//    [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"studentData"];//    [[NSUserDefaults standardUserDefaults] synchronize];//     */         // 解档方法//      + (id)unarchiveObjectWithData:(NSData *)data;//    //  2. 获取//    id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"studentData"];//    // 我们打印一下这时候获取的真实类型是什么?//    NSLog(@"obj : %@",NSStringFromClass([obj class]));////     obj : __NSCFData////    我们需要解归档。 将NSData数据转化为 student对象//   Student *getStudent =  [NSKeyedUnarchiver unarchiveObjectWithData:obj];//    NSLog(@"getStudent : %@",getStudent);////    getStudent : name :Charles studentNumber :12110501007 sex :man                // 归档解档    NSArray *array = @[@"1",@"2"];        NSMutableData *mulData = [NSMutableData data];    NSKeyedArchiver *keyedArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mulData];       [keyedArchiver encodeObject:array forKey:@"array"];    [keyedArchiver finishEncoding];    [mulData writeToFile:@"/Users/ms/Desktop/FileManager/file.txt" atomically:YES];//    /Users/ms/Desktop/FileManager/file.txt    
@interface Student () <NSCoding>@end@implementation Student- (void)encodeWithCoder:(NSCoder *)aCoder {        [aCoder encodeObject:self.name forKey:@"name"];    [aCoder encodeObject:self.studentNumber forKey:@"studentNumber"];    [aCoder encodeObject:self.sex forKey:@"sex"];}- (id)initWithCoder:(NSCoder *)aDecoder {    if (self = [super init]) {        self.name = [aDecoder decodeObjectForKey:@"name"];        self.studentNumber = [aDecoder decodeObjectForKey:@"studentNumber"];        self.sex = [aDecoder decodeObjectForKey:@"sex"];    }    return self;}- (NSString *)description{    return [NSString stringWithFormat:@"name :%@ studentNumber :%@ sex :%@", _name,_studentNumber,_sex];}



0 0