iOS存储的三种方式
2015-06-07 17:53
393 查看
iOS中存储的3中方式:
1.NSUserDefaults
注意存储基本对象类型是没有问题的,但是要存储自定义对象,则要将对象内所有的属性(或是需要存储的属性)序列化,实现NSCoding协议序列化。
对于存储的是自定义的对象:(示例Contact的序列化)
2.沙盒
3.sqlite
1.NSUserDefaults
注意存储基本对象类型是没有问题的,但是要存储自定义对象,则要将对象内所有的属性(或是需要存储的属性)序列化,实现NSCoding协议序列化。
存: [[NSUserDefaults standardUserDefaults] setValue:@"yellow" forKey:@"color"]; [[NSUserDefaults standardUserDefaults] synchronize];
取: NSString *color = [[NSUserDefaults standardUserDefaults] objectForKey:@"color"];
对于存储的是自定义的对象:(示例Contact的序列化)
#import <Foundation/Foundation.h> @interface Contact : NSObject <NSCoding> @property (nonatomic,retain) NSString *name; @property (nonatomic,retain) NSString *phoneNumber; + (id)contactsWithName:(NSString *)aName phoneNumber:(NSString *)aPhoneNumber; @end
#import "Contact.h" #define kNameKey @"NameKey" #define kPhoneNumberKey @"PhoneNumberKey" @implementation Contact - (id)initWithName:(NSString *)aName phoneNumber:(NSString *)aPhoneNumber { if (self = [super init]) { self.name = aName; self.phoneNumber = aPhoneNumber; } return self; } //初始化配套的便利方法 ,静态方法中的self 不代表当前类的对象,代表当前类本身 + (id)contactsWithName:(NSString *)aName phoneNumber:(NSString *)aPhoneNumber { return [[[self alloc] initWithName:aName phoneNumber:aPhoneNumber] autorelease]; } //对象序列化的两个协议方法 //对象序列化的方法,把对象的所有属性编码到本地 - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:_name forKey:kNameKey]; [aCoder encodeObject:_phoneNumber forKey:kPhoneNumberKey]; } //对象反序列化的方法 - (id)initWithCoder:(NSCoder *)aDecoder { if(self = [super init]) { self.name = [aDecoder decodeObjectForKey:kNameKey]; self.phoneNumber = [aDecoder decodeObjectForKey:kPhoneNumberKey]; } return self; }
2.沙盒
- (void)viewDidLoad { [super viewDidLoad]; NSMutableDictionary *savedDic = [[NSMutableDictionary alloc] initWithContentsOfFile:[self dataFilePath]]; //如果第一次进入,从userdefault中取不到数据,手动创建一个字典 if (!savedDic) { self.dic = [NSMutableDictionary dictionaryWithCapacity:0]; } else { self.dic = savedDic; } //注册一个即将进入后台的通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveData) name:UIApplicationWillResignActiveNotification object:nil]; } //返回文件的路径 - (NSString *)dataFilePath { //沙盒 //获得沙盒下面Documents文件夹的路径 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSLog(@"paths %@",paths); NSString *path = [paths objectAtIndex:0]; //在documents 路径下,追加一个文件路径 NSString *filePath = [path stringByAppendingPathComponent:@"select.plist"]; return filePath; } - (void)saveData { //字典当中存储的value 必须是 array dictionary Boolean data date nsnumber nsstring //把一个字典写到文件中,实际上是按照plist 的格式去组织数据的 [_dic writeToFile:[self dataFilePath] atomically:YES]; NSMutableDictionary *savedDic = [[NSMutableDictionary alloc] initWithContentsOfFile:[self dataFilePath]]; }
3.sqlite
相关文章推荐
- iOS三级缓存库的实现心得
- iOS_正则表达式
- iOS开发多线程—06线程的状态
- iOS开发多线程—05GCD介绍
- iOS开发多线程—04线程间的通信
- iOS开发多线程—03线程安全
- iOS开发多线程—01多线程简单介绍
- iOS开发多线程—02创建线程
- [转]iOS 不要使用tag传递TableViewCell的indexPath值
- iOS CoreData详解(七)性能相关
- IOS代码管控APP页面横竖屏切换
- ios动画学习(三)
- 自定义EditText实现类iOS风格搜索框
- vmstat iostat 分析
- iOS中延迟执行的几种方式
- [转]【IOS-博客】IOS牛人博客一览表
- iOS中如何呼出另一个应用
- IOS成长之路-使用xib界面与和代码相关联的方法
- iOS开发之xib技巧介绍
- iOS沙盒(sandbox)机制和文件操作