版权所有,禁止匿名转载;禁止商业使用。
第一:plist属性列表
适用对象:仅仅是Foundation框架自带的一些类比如:NString\NSarry\NSDictionary\NSset\NSnumber\NSdata
使用:
1:调用对象的writeToFile方法就可以写入文件
2:调用对象的array(...)WithContentsOfFile方法就可以从文件读取对象内容
存储:
//1,获得沙盒跟路径 NSString *home = NSHomeDirectory(); NSLog(@"%@",home); //2,doucument路径,方法会自动拼接”/“ NSString *docPath = [home stringByAppendingPathComponent:@"Documents"]; //3,NSString,字典,数组,NSData,NSNumber,常见的数据类型 //新建数据 NSArray *data = @[@"java",@10,@"lallal"]; NSString *filePath = [docPath stringByAppendingPathComponent:@"data.plist"]; [data writeToFile:filePath atomically:YES];
读取:
//1,获得沙盒跟路径 NSString *home = NSHomeDirectory(); NSLog(@"%@",home); //2,doucument路径 NSString *docPath = [home stringByAppendingPathComponent:@"Documents"]; //3,NSString,字典,数组,NSData,NSNumber,常见的数据类型 //文件路径 NSArray *data = @[@"java",@10,@"lallal"]; NSString *filePath = [docPath stringByAppendingPathComponent:@"data.plist"]; //读取数据 NSArray *array = [NSArray arrayWithContentsOfFile:filePath]; NSLog(@"%@",array);
第二:偏好设置
本质上还是plist属性列表的方式存储
存储简单不关心文件夹和文件名,但是只能存储到一个文件中(不能储存大量数据)
存储:
//1,利用NSUserDefaults能直接访问软件的偏好设置文件夹 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; //2,存储数据 [defaults setObject:@"tf" forKey:@"account"]; [defaults setObject:@"123" forKey:@"pwd"]; //3,立刻同步 [defaults synchronize];
读取:
/
/读取 NSUserDefaults defaults = [NSUserDefaults standardUserDefaults]; account = [defaults objectForKey:@"account"]; NSLog(@ ,account);
第三:NSCodeing
1:能将任何遵守了NSCodeing协议的对象塞进文件中
使用:
1:-(void)encodeWithCoder:(NSCoder
)aCoder
将对象归档的时候就会调用,(将对象写入到文件之前会调用)
在这个方法中说清楚;1:那些属性要进行存储,2:怎样储存
)aDecoder
从当前文件中解析对象是调用
在这个方法中说清楚,1:那些属性需要解析(读取),2:怎样解析这些属性
注:如果父类中也有属性需要归档或者读取,必须调用super的encodeWithCoder:和initWithCoder:方法
对象中调用:在遵循协议NSCoding的实现“.m”文件中
//存储:需要重写的方法: -(void)encodeWithCoder:(NSCoder *)aCoder { //将name属性进行编码, [aCoder encodeObject:_name forKey:@"name"]; [aCoder encodeInt:_age forKey:@"age"]; } // 读取:需要重写的方法 -(id)initWithCoder:(NSCoder *)aDecoder { if (self = [super init]) { _name = [aDecoder decodeObjectForKey:@"name"]; _age = [aDecoder decodeIntForKey:@"age"]; } return self; //调用父类的方法 //if (self = [super initWithCoder:aDecoder]) { // //} }
注:如果是子类进行存取的话,需要在相应的方法第一行调用,这样父类中已经声明要进行归档的对象就不用重复声明了。
[super encodeWithCoder:aCoder]; if (self = [super initWithCoder:aDecoder]) { } 实例,储存: //归档 Person *p = [[Person alloc] init]; p.name = @"jack"; p.age = 10; p.height = 1.89; NSString *path = @"/Users/tengfei/Desktop/person.data"; [NSKeyedArchiver archiveRootObject:p toFile:path];
读取:
/
/读档 NSString *path = @"/Users/tengfei/Desktop/person.data"; Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; NSLog(@"name:%@,age:%d",p.name,p.age); ---后面稍后进行介绍:
第四:SQLite
适用于大批量数据
第五:Core Data
ios5.0以后才出现,效率底下(SQLite3)