iOS——数据存取


l应用程序包:(上图中的Layer)包含了所有的资源文件和可执行文件
lDocuments:保存应用运行时生成的 需要持久化的数据,iTunes同步设备时 会备份该目录。例如,游戏应用可将游戏存档保存在该目录
l
ltmp:保存应用运行时所需的 临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时 不会备份该目录
l
lLibrary/Caches:保存应用运行时生成的 需要持久化的数据,iTunes同步设备时 不会备份该目录。一般存储体积大、不需要备份的非重要数据
l
lLibrary/Preference:保存应用的所有 偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时 会备份该目录

iOS 应用 数据存储的常用方式
1.plist   
2. 偏好设置 NSUserDefaults 
3.NSCoding
4.SQLite3
5.Core Data
6.网络
————————————————————————————————————————————————————————————————————————————

1.XML 属性列表( plist )归档

- (void)saveArray

{

    // 1.获得沙盒根路径

    NSString *home = NSHomeDirectory();

    

    // 2.document路径

    NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];

    

    // 3.新建数据

//    MJPerson *p = [[MJPerson alloc] init];

//    p.name = @"rose";

    NSArray *data = @[@"jack", @10, @"ffdsf"];

    

    

    NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist"];

    

    

    [data writeToFile:filepath atomically:YES];

}


- (IBAction)read {

    // 1.获得沙盒根路径

    NSString *home = NSHomeDirectory();

    

    // 2.document路径

    NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];

    

    // 3.文件路径

    NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist"];

    

    // 4.读取数据

    NSArray *data = [NSArray arrayWithContentsOfFile:filepath];

    NSLog(@"%@", data);

}


2.Preference( 偏好设置 )

- (IBAction)save {

    // 1.利用NSUserDefaults,就能直接访问软件的偏好设置(Library/Preferences)

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    

    // 2.存储数据

    [defaults setObject:@"mj" forKey:@"account"];

    [defaults setObject:@"123" forKey:@"pwd"];

    [defaults setInteger:10 forKey:@"age"];

    [defaults setBool:YES forKey:@"auto_login"];

    

    // 3.立刻同步

    [defaults synchronize];

}


- (IBAction)read {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    

    NSString *account = [defaults objectForKey:@"account"];

    BOOL autoLogin = [defaults boolForKey:@"auto_login"];

    NSLog(@"%@ -- %d", account, autoLogin);

}



3.NSKeyedArchiver 归档 ( NSCoding )

 (IBAction)save {

    // 1.新的模型对象

    MJStudent *stu = [[MJStudent alloc] init];

    stu.no = @"42343254";

    stu.age = 20;

    stu.height = 1.55;

    

    // 2.归档模型对象

    // 2.1.获得Documents的全路径

    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    // 2.2.获得文件的全路径

    NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];

    // 2.3.将对象归档

    [NSKeyedArchiver archiveRootObject:stu toFile:path];

}


- (IBAction)read {

    // 1.获得Documents的全路径

    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    // 2.获得文件的全路径

    NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];

    

    // 3.从文件中读取MJStudent对象

    MJStudent *stu = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

    

    NSLog(@"%@ %d %f", stu.no, stu.age, stu.height);

}


- (void)encodeWithCoder:(NSCoder *)encoder

{

    [encoder encodeObject:self.no forKey:@"no"];

    [encoder encodeInt:self.age forKey:@"age"];

    [encoder encodeDouble:self.height forKey:@"height"];

}


/**

 *  从文件中解析对象时会调用

 *  在这个方法中说清楚哪些属性需要存储

 */

- (id)initWithCoder:(NSCoder *)decoder

{

    if (self = [super init]) {

        // 读取文件的内容

        self.no = [decoder decodeObjectForKey:@"no"];

        self.age = [decoder decodeIntForKey:@"age"];

        self.height = [decoder decodeDoubleForKey:@"height"];

    }

    return self;

}

@end

你可能感兴趣的:(iOS——数据存取)