域(Domain)
user defaults
数据库中其实是由两个层级的域组成的,当你读取一个键值的数码时,NSUserDefaults
从上到下透过域的层级寻找正确的值,分歧的域有分化的功力,有些域是可持久的,有些域则尤其。
- NSArgumentDomain (参数域):
有最高的优先权,在此处设置的参数可以覆盖任什么地方方设置的参数. - ApplicationDomain
(应用域):最器重的域,它存储着您app通过NSUserDataults set...forKey
拉长的设置. - NSGlobalDomain (全局域) :存储着系统的装置
- Languages – Specific Domain (语言域): 包蕴地点、日期等
- NSRegistrationDomain (参数域) :
仅有较低的优先权,唯有在应用域没有找到值时才从注册域去追寻。
注:这几个域的先行级依次是从上到下.
iOS Sandbox
对于一个iOS 程序来说,系统给它提供一个容器,用来储存自己的新闻.
各样ios应用都有投机的选拔沙盒,应用沙盒就是文件系统目录,与其余使用放入文件
系统隔离,ios系统不容许访问其余应用的利用沙盒.(也有例外,比如在用户授权意况下访问通讯录,相册等)
沙盒目录结构
沙盒结构
-
App Bundle: 包罗所有资源文件和可执行文件
-
Documents:
保存应用运行时生成的必要持久化的数码,iTunes会自动备份该目录 -
tmp:
保存应用运行时所需的临时数据,使用完结后再将相应的公文从该目录删除,应用尚未运行时,系统也可能会自动清理该目录下的文书,iTunes不会共同该目录,小米重启时该目录下的公文会丢掉。 -
Libaray: 存储程序的默许设置和其他景况消息,iTunes会自动备份该目录。
-
Libaray/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除,一般存放体积相比大,不是很重大的资源
-
Libaray/Preferences:保存应用的具有偏好设置,ios的Settings(设置)应用会在该目录中找找应用的装置音信,iTunes会自动备份该目录。
什么得到文件路径
iOS设备中每个文件都有路子,那指的是文件在文件系统中的准确地方.要让应用程序可以读写器沙盒中的文件,要求指定该公文的总体路径.
Core
Foundation提供了一个名为NSSearchDirectoriesInDomains的C语言函数,他归来指向应用程序的目录Documents或Library/Caches的路径.该函数可以回来八个目录,由此该函数的回来结果是一个NSArray对象.使用该函数来访问指定目录Documents或Library/Caches的门路时,它回到的数组将只包括一个NSString.
// 获取沙盒主目录路径
NSString *homeDir = NSHomeDirectory();
// 获取Documents目录路径
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) firstObject];
// 获取Library的目录路径
NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject];
// 获取Caches目录路径
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
// 获取tmp目录路径
NSString *tmpDir = NSTemporaryDirectory();
读写多少
NSFileManager是一个单列类,也是一个文件管理器。可以因此NSFileManager创建文件夹、创立文件、写文件、读文件内容等等基本效率。
那里有一篇我以为写得挺好的:
http://www.jianshu.com/p/64b673ba551b
就不再啰嗦了
SQLite
想和豪门享受部分新手入门写得SQLite的数据库不难操作
自己在此间运用的是第三方的库:FMDB.不说废话间接上代码
那是一个用FMDB后写得简单的数据库操作的类
AddressBookDataBase.h 文件
#import <FMDB/FMDB.h>
#import <Foundation/Foundation.h>
@interface AddressBookDataBase : NSObject
-(void)openDataBase:(FMDatabase *)DataBase;
-(FMDatabase *)createdDataBase;
-(void)closeDataBase:(FMDatabase *)DataBase;
-(void)insertDatatoDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name phoneNumberIs: (NSString *) phoneNumber;
-(void)deleteDataFromDataBase:(FMDatabase *)DataBase nameIs: (NSString *) name;
-(void)modificationDataFromDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name phoneNumberIs: (NSString *) phoneNumber originalName:(NSString *)originalName;
-(void)deleteTableFromDataBase:(FMDatabase *)DataBase table:(NSString *)tableName;
@end
AddressBookDataBase.m 文件
#import "AddressBookDataBase.h"
@implementation AddressBookDataBase
-(FMDatabase *)createdDataBase{
//创建打开数据库
NSString * strPath = [NSHomeDirectory() stringByAppendingString:@"/Documents/AddressList.db"];
NSLog(@"%@",strPath);
FMDatabase * db = [FMDatabase databaseWithPath:strPath];
if (db != nil) {
NSLog(@"数据库创建成功");
}
return db;
}
-(void)openDataBase: (FMDatabase *)DataBase{
BOOL isOpen = [DataBase open];
if (isOpen) {
NSLog(@"打开数据库成功");
}
}
-(void)closeDataBase: (FMDatabase *)DataBase{
BOOL isClose = [DataBase close];
if (isClose) {
NSLog(@"关闭数据库成功");
}
}
-(void)insertDatatoDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name phoneNumberIs: (NSString *) phoneNumber {
NSString * strCreateTable = @"create table if not exists addressList(id integer primary key autoincrement,name varchar(20),phoneNumber varchar(20));";
//如果执行成功 返回YES
BOOL isCreate = [DataBase executeUpdate:strCreateTable];
if(isCreate == YES){
NSLog(@"创建数据表成功");
}
NSString * strInsert = [NSString stringWithFormat:@"insert into addressList values(NULL,'%@','%@');",name,phoneNumber];
NSLog(@"%@",strInsert);
BOOL isOK = [DataBase executeUpdate:strInsert];
if (isOK == YES) {
NSLog(@"插入数据成功");
}
}
-(void)deleteDataFromDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name{
NSString * strDelete = [NSString stringWithFormat:@"delete from addressList where name = '%@'",name];
NSLog(@"%@",strDelete);
BOOL isOK = [DataBase executeUpdate:strDelete];
if(isOK == YES){
NSLog(@"删除成功");
}
}
-(void)modificationDataFromDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name phoneNumberIs: (NSString *) phoneNumber originalName:(NSString *)originalName{
NSString* strModification = [NSString stringWithFormat:@"update addressList set phoneNumber = '%@', name = '%@' where name = '%@';",phoneNumber,name,originalName];
NSLog(@"%@",strModification);
BOOL isOk = [DataBase executeUpdate:strModification];
if(isOk ==YES){
NSLog(@"修改表成功!");
}
}
-(void)deleteTableFromDataBase:(FMDatabase *)DataBase table:(NSString *)tableName{
NSString* strDeleteTable = [NSString stringWithFormat:@"drop table %@",tableName];
BOOL isOk = [DataBase executeUpdate:strDeleteTable];
if(isOk ==YES){
NSLog(@"删除表成功!");
}
}
@end
至于sqlite的一对语法的题材,那里给我们推荐一个网站
http://www.runoob.com/sqlite/sqlite-update.html.
其间关于SQLite的语句有详细的语法讲解,希望可以帮到大家.
总结
有关Domain的操作 实际上固然简单的数目存储操作.有时候人家说Domain
你也许不领悟是怎么着意思.查查字典,谷歌会知道的.而Domain又分了成百上千个Domain.所以很不难就弄混了.你必要了解这几个Domain之间的分歧.
关于NSSearchDirectoriesInDomains
该函数的再次回到值是一个NSString的数组.
本条函数有个domainMask
,那里只举出NSUserDomainMask
.的情形.借使那里的参数写的是以此NSUserDomainMask
.不过该数组将唯有一个NSString对象.重回的就是您在NSHomeDirectory下搜寻Documents/Library文件夹的路径.所以使用的时候一向用下标访问就足以了.其余的请查阅NSSearchDirectoriesInDomains
API的说明