往内存中存储分为简单对象存储和复杂对象的存储, 简单类型对象一般有字符串,数组,字典 Data ;复杂的对象为系统提供之外的类型 如Model类, 复杂数据存储原理 : 将类型的对象归档(序列化) 为NSData类型的对象,然后将NSData类型对象 进行存储.
对硬盘进行管理的工具为NSFileManger, 主要进行文件管理;
沙盒安全机制 是ios的安全机制(防止别的应用程序调用自己应用程序里面的东西)
1.文件夹 Bundel 主要存放 代码, 资源文件, 配置文件;
特性: (1)在程序运行期间位只读 不能进行任何修改 (2)开发期间可以更改代码.
2.文件夹 Documents
特性: (1)大小限制(会自动上传云盘) (2) 一般存放数据库 (3)存放从应用程序安装到删除的东西;
3.文件夹 library 分为(1)Caches(缓存) (2) preference(配置 偏好设置)
文件夹Caches 特性(1)放图片缓存 (2) 网络数据(缓存)
preference 用 NSUSerDefaules 自动存放到文件夹中
4.文件夹 Tmp (临时性文件夹), 数据用完就删 (如压缩包)
1.字符串的存储以及读写方式;
获得library文件夹的地址
NSArray *array = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [array firstObject];
创建文件夹名并拼接路径
path = [NSString stringWithFormat:@"%@/hello.txt", path];
NSString *str = @"str";
根据路径写入文件夹
[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
根据路径读写字符串内容
NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
2. 数组的存储及读写方式;
NSArray *array = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [array firstObject];
path = [NSString stringWithFormat:@"%@/bihao.txt", path];
NSMutableArray *array1 = [NSMutableArray array]
[array1 addObject:@"sd"];
[array1 addObject:@"ji"];
[array1 writeToFile:path atomically:YES];
NSMutableArray *arr = [NSMutableArray arrayWithContentsOfFile:path1];
NSString *path = [array1 firstObject];
path = [NSString stringWithFormat:@"%@/2222", path];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setObject:@"nihao" forKey:@"000"];
[dic writeToFile:path atomically:YES];
4.Data的存储及读写方式;
NSArray *arr = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [arr firstObject];
path = [NSString stringWithFormat:@"%@/11111", path];
NSData *data = [NSData dataWithContentsOfFile:path];
将data 转化为 字符串
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
[str release];
5.model类型的存储与读写
首先遵循NSCoding协议归档(序列化)的协议; 将属性转化为NSData时会走
然后将属性按照一定顺序进行归纳;- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInteger:self.age forKey:@"age"];
}
反归档(反序列化), 将NSData转换为model的时候将相对应的属性进行赋值;
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeIntegerForKey:@"age"];
}
return self;
}
6.NSUserDefault 的使用
获得对象;
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setObject:@"uuu" forKey:@"name"];
异步存储
快速存储(同步)
[user synchronize];
取出方式
NSUserDefaults *u = [NSUserDefaults standardUserDefaults];
NSString *str = [u objectForKey:@"name"];
}
NSFileManager *file = [NSFileManager defaultManager];
NSArray *array = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [array firstObject];
path = [NSString stringWithFormat:@"%@/hello", path];
判断文件是否存在;
BOOL judge = [file fileExistsAtPath:path];
if (judge == YES) {
(管理代码)
}
else
{
(管理代码)
}
8. 文件拷贝;
(1)首先获得被拷贝文件的路径
NSArray *array = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [array firstObject];
path = [NSString stringWithFormat:@"%@/copy", path];
NSString *str = @"hhh";
[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
(2)获得要拷贝到的地方的地址;
NSArray *array2 = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path2 = [array2 firstObject];
path2 = [NSString stringWithFormat:@"%@/NTM.txt", path2];
(3)根据路径进行复制
NSFileManager *file = [NSFileManager defaultManager];
[file copyItemAtPath:path toPath:path2 error:nil];