iphone保存数据/选项的5种方法

一.NSUserDefaults (存在Library目录)
//Read:objectsForKey, intForKey, floatForKey, boolForKey
NSString *user = [[NSUserDefaults standardUserDefaults] objectForKey: "username"];

//Write:
[[NSUserDefaults standardUserDefaults] setObject:@"user1" forKey: "username"];
//1): set并没有立即写入, 可用synchornize方法强制马上写入磁盘
//2): 批量初始化
NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys:
                                   @"zhouth", @"username", 
                                   nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
[[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:defaultValues];

二.属性列表 (存在Documents目录)
//read:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = [paths objectAtIndex:0];
NSString *setFile = [documentPath stringByAppendingPathComponent:@"set.list"];

if ([[NSFileManager defaultManager] fileExistsAtPath:setFile]){
  NSArray *array = [[NSArray alloc] initWithContentsOfFile:setFile];
  NSString *user = [array objectAtIndex:0];
  [array release];
}
//write:
NSMutableArray *array = [NSMutableArray alloc] init];
[array addObject:user];
[array writeToFile:setFile atomically:YES];
[array release];

三.对象模型归档, 序列化到文件
(对象实现NSCoding, NSCopying协议)
//read:
NSData *data = [[NSMutableData alloc] initWithContentsOfFile:dataFile]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
MyObject *myObject = [unarchiver decodeObjectForKey:@"MyObjectData"];
NSString *user = myObject.user;
[unarchiver finishDecoding];//finished, clear memory
[unarchiver release];
[data release];
//write:
NSMutableData *data = [[NSMutableData allow] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:myObject forKey:@"MyObjectData"];
[archiver finishEncoding];
[data writeToFile:dataFile atomically: YES];
[myObject release];
[archiver release];
[data release];

//MyObject
#import <UIKit/UIKit.h>
@interface MyObject:NSObject<NSCoding, NSCopying>
@property (nonatomic retain) NSString *user;
@end

#import "MyObject.h"
@implementation
@synthesize user;
- (void)encodeWithCoder:(NSCoder *)encoder{
 [encoder encodeObject: user forKey:@"username"];
}
- (void)initWithCoder:(NSCoder *)decoder{
if (self=[super init]){
  user = [[decoder decodeObjectForKey:@"username"] retain];//retain
}
return self;
}
- (id)copyWithZone:(NSZone *)zone{
MyObject copy = [[[self class] allocWithZone:zone] init];
copy.user = [[self.user copyWithZone:zone] autorelease]; //autorelease
return copy;
}

四. SQLite, 用C字符串, 非NSString
sqlite3 *database;
int result = sqlite3_open("../file", &database);//return SQLITE_OK
char *errorMsg;
const char *sql = [sqlNSString UTF8String]; //"create table....."
int result = sqlite3_exec(database, sql, NULL, NULL, &errorMsg);
.....
sqlite3_stmt *statement...
sqlite3_prepare_v2()...
sqlite3_step(statement)....
sqlite3_column_text()....
sqlite3_finalize(statement)....
sqlite3_close(database)....

五.Core Data
由xcode图形化实现数据结构, 数据也是存在sqlite

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值