首页 > 代码库 > 归档和解档

归档和解档

对于系统定义不可变的类型的对象,复制时不会产生新的对象【ns numb string   array dictionary】r只写r+xie读w只读w+清理完在写a追加a+数据持久化NSUserDefaults 只能存系统定义的类型,不能存太多或是大数据,可用于系统偏好设置;plist不能存自定义的数据NSKeyedArchiverSQLite数据库Core DataXML、JSON简单易于传输//c语言的文件操作        FILE *fp = fopen("/Users/apple/Desktop/test.txt", "r+");        if (fp == NULL) {            return -1;        }                char a[10] = {0};        size_t res = fread(a, 1, 2, fp);        if (res == 0) {            printf("read failed\n");        }        printf("%s\n", a);        fpos_t pos;        fgetpos(fp, &pos);        printf("pos: %lld\n", pos);                size_t result = fwrite("xyzwopq", 1, 6, fp);        fgetpos(fp, &pos);        printf("pos: %lld\n", pos);                if (result == 0) {            printf("write failed\n");        }        else {            printf("write success\n");        }                res = fread(a, 1, 2, fp);        if (res == 0) {            printf("read failed\n");        }        printf("%s\n", a);        fgetpos(fp, &pos);        printf("pos: %lld\n", pos);                fclose(fp);  //属性列表的方式,只能存系统定义的类型    NSArray *array1 = [NSArray arrayWithContentsOfFile:@"/Users/apple/Desktop/test.plist"];    NSLog(@"%@", array1);        //1. 只能存系统定义的类型    //2. 不能存太多数据或者是大数据    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];//单(实)例类    [userDefault setInteger:2340 forKey:@"age"];//    NSInteger age = [userDefault integerForKey:@"age"];    NSLog(@"%d", age);          //二进制编码    NSString *str = @"123abc";    NSData *data =http://www.mamicode.com/ [str dataUsingEncoding:NSUTF8StringEncoding];    NSLog(@"%@", data);        //从文件中读取数据    data = http://www.mamicode.com/[NSData dataWithContentsOfFile:@"/Users/apple/Desktop/a.out"];    NSLog(@"%@", data);        NSMutableData *mData =http://www.mamicode.com/ [NSMutableData data];    [mData appendData:data];    [mData appendData:data];    //项文件中写数据    [mData writeToFile:@"/Users/apple/Desktop/b.out" atomically:YES];        NSURL *url = [NSURL URLWithString:@"http://sqlite.org/images/foreignlogos/nokia.gif"];    NSData *nokia = [NSData dataWithContentsOfURL:url];    [nokia writeToFile:@"/Users/apple/Desktop/nokia.gif" atomically:YES];//////不是系统的数据需要编码取归档,译码再解档//////@implementation Dog要实现NSCoding两个方法- (void)encodeWithCoder:(NSCoder *)aCoder{    [aCoder encodeObject:_name forKey:kDogNameKey];}- (id)initWithCoder:(NSCoder *)aDecoder{    self = [super init];    if (self) {        self.name = [aDecoder decodeObjectForKey:kDogNameKey];    }        return self;}@end、、、、、、、、、、、、、、、、、、、、、、/////////归档与解档 NSString *str = @"abc";    [NSKeyedArchiver archiveRootObject:str toFile:@"/Users/apple/Desktop/test.plist"];        NSString *str1 = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/apple/Desktop/test.plist"];    NSLog(@"%@", str1);        Student *stu = [[Student alloc] init];    stu.name = @"Zhangsan";    stu.age = 30;        [NSKeyedArchiver archiveRootObject:stu toFile:@"/Users/apple/Desktop/student.plist"];        Student *stu1 = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/apple/Desktop/student.plist"];    NSLog(@"%p, %p", stu, stu1);    NSLog(@"%@:%d, %@:%d", stu.name, stu.age, stu1.name, stu1.age);        NSData *stuData =http://www.mamicode.com/ [NSKeyedArchiver archivedDataWithRootObject:stu];    [stuData writeToFile:@"/Users/apple/Desktop/stu.plist" atomically:YES];        NSData *stuData2 = [NSData dataWithContentsOfFile:@"/Users/apple/Desktop/stu.plist"];    Student *stu3 = [NSKeyedUnarchiver unarchiveObjectWithData:stuData2];    NSLog(@"%@:%d---%@:%d", stu.name, stu.age, stu3.name, stu3.age);        NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];    [userDefault setObject:stuData forKey:@"xxxx"];    NSData *stuData3 = [userDefault objectForKey:@"xxxx"];    Student *stu4 = [NSKeyedUnarchiver unarchiveObjectWithData:stuData3];    NSLog(@"%@:%d", stu4.name, stu4.age);        stu4.dog = [[Dog alloc] init];    stu4.dog.name = @"小强";    [NSKeyedArchiver archiveRootObject:stu4 toFile:@"/Users/apple/Desktop/dog.plist”];、、、、、、、、、、、、、、、、、、、、、、、、、、iOS沙盒中一共有四个文件夹 • Documents/tmp/app/Library• 系统提供了获取这些目录的方法•  NSHomeDirectory()•  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirecto ry, NSUserDomainMask, YES);•  NSString *docDirectory = [paths objectAtIndex: 0];•  NSTemporaryDirectory()• 获取当前程序中资源文件路径• NSString *imagePath = [[NSBundle mainBundle] pathForResource:@”image” ofType: @”png”]; 、、、、、、、沙盒机制、、、、、、、、    NSString *home = NSHomeDirectory();    NSLog(@"%@", home);        NSString *doc = [home stringByAppendingPathComponent:@"Documents"];    NSLog(@"%@", doc);        //2.    NSArray *array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);    NSLog(@"%@", array);    NSString *doc2 = [array firstObject];    NSLog(@"%@", doc2);        //3. tmp    NSString *tmp = NSTemporaryDirectory();    NSLog(@"%@", tmp);        NSString *name = @"戴维营教育";    NSString *path = [doc stringByAppendingPathComponent:@"test.plist"];    [name writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];        //4.    NSString *dbPath = [[NSBundle mainBundle] pathForResource:@"testDB" ofType:@"db"];    NSLog(@"%@", dbPath);