一.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