zoukankan      html  css  js  c++  java
  • 归档和解档

    对于系统定义不可变的类型的对象,复制时不会产生新的对象【ns numb string   array dictionary】
    
    
    r只写
    r+xie读
    w只读
    w+清理完在写
    a追加
    a+
    
    
    数据持久化
    NSUserDefaults 只能存系统定义的类型,不能存太多或是大数据,可用于系统偏好设置;
    plist不能存自定义的数据
    NSKeyedArchiver
    SQLite数据库
    Core Data
    XML、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
    ");
            }
            printf("%s
    ", a);
            fpos_t pos;
            fgetpos(fp, &pos);
            printf("pos: %lld
    ", pos);
            
            size_t result = fwrite("xyzwopq", 1, 6, fp);
            fgetpos(fp, &pos);
            printf("pos: %lld
    ", pos);
            
            if (result == 0) {
                printf("write failed
    ");
            }
            else {
                printf("write success
    ");
            }
            
            res = fread(a, 1, 2, fp);
            if (res == 0) {
                printf("read failed
    ");
            }
            printf("%s
    ", a);
            fgetpos(fp, &pos);
            printf("pos: %lld
    ", 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 = [str dataUsingEncoding:NSUTF8StringEncoding];
        NSLog(@"%@", data);
        
        //从文件中读取数据
        data = [NSData dataWithContentsOfFile:@"/Users/apple/Desktop/a.out"];
        NSLog(@"%@", data);
        
        NSMutableData *mData = [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 = [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);
  • 相关阅读:
    MYSQL InnoDB二级索引存储主键值而不是存储行指针的优点与缺点
    公众号 苹果端点击事件委托不起作用而安卓可以
    php emoji表情转换
    PHP 获取网页所有链接
    node 一行一行的读取文件
    AsyncJS 异步流程控制DEMO详细介绍
    node.js 获取异步方法里面数据 的方式
    利用blob 加密防下载
    html css 3D轮播图
    transform和transition组合动画错误问题
  • 原文地址:https://www.cnblogs.com/lidongq/p/3879858.html
Copyright © 2011-2022 走看看