/****************************NSDictionary***************************/
一、 NSDictionary
1,NSDictionary的介绍和特点
1),NSDictionary翻译过来叫做”字典”;
2),NSDictionary的作用类似: 通过一个key(键), 就能找到对应的value(值);
3),NSDictionary是不可变的, 一旦初始化完毕, 里面的内容就无法修改;
4),字典存储的时候,必须是"键值对"的方式来存储(同时键不要重复);如果重复,最后添加的将不能保存到字典中;
5),键值对中存储的数据是"无序的";
6),键值对集合可以根据键, 快速获取数据;
7),字典的key值和value值都必须是对象;
2,NSDictionary的基本使用
1),创建
+ (instancetype)dictionary;
+ (instancetype)dictionaryWithObject:(id)object forKey:(id <NSCopying>)key;
+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...;
2),快速创建
格式:
@{key:value, key:value,...};
NSDictionary字面量
NSDictionary *dict4 = @{@"zs":@"zhaosi",@"zs":@"zhangsan",@"ls":@"lisi",@"bz":@"banzhang"};//key:value; json
3),其他操作
- (NSUInteger)count; 返回字典的键值对数目
- (id)objectForKey:(id)aKey; 根据key取出value
通过key获取value的简写形式:
NSString *value = dict4[@"zs"];//value 是 zhaosi
4),遍历
第一种方式:
//第一步:获取所有的key
//第二步:根据key获取value
for(NSString *key in dict4){
NSLog(@"---key = %@,value = %@",key,[dict4 objectForKey:key]);
NSString *value = dict4[key];
}
第二种方式:
[dict4 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"%@ --> %@",key,obj);
}];
3,NSDictionary文件操作
*****"将字典保存城市数组的例子练习一遍"*****
1),将字典写入文件中
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;
2),从文件中读取字典
+ (id)dictionaryWithContentsOfFile:(NSString *)path;
+ (id)dictionaryWithContentsOfURL:(NSURL *)url;
4,NSMutableDictionary
1),介绍
NSMutableDictionary是NSDictionary的子类;
NSDictionary是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素;
NSMutableDictionary是可变的, 随时可以往里面添加\更改\删除元素;
2),常用方法
添加一个键值对(会把aKey之前对应的值给替换掉)
- (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey;
修改值
- (void)setValue:(id)value forKey:(NSString *)key;
通过aKey删除对应的value
- (void)removeObjectForKey:(id)aKey;
删除所有的键值对
- (void)removeAllObjects;
5,NSDictionary和NSArray区别 (面试题)
1> NSArray是有序的,NSDictionary是无序的;key
2>,NSArray存储的是单独的对象,NSDictionary存储的是键值对;
3> NSArray是通过下标访问元素,NSDictionary是通过key访问元素;
4>,NSArray的简写创建:
@[@"Jack", @"Rose"] (返回是不可变数组)
5>,NSDictionary的简写创建:
@{@"zs":@"zhaosi",@"zs":@"zhangsan"};(返回是不可变字典)
/****************************NSFileManager***************************/
二,NSFileManager
1,NSFileManager介绍
顾名思义, NSFileManager是用来管理文件系统的 ,
它可以用来进行常见的文件\文件夹操作(拷贝、剪切、创建等)
2,创建文件管理者对象(是一种单利模式)
NSFileManager *fm = [NSFileManager defaultManager];
3,NSFileManager基本判断
1),判断path这个文件或文件夹(目录)是否存在
- (BOOL)fileExistsAtPath:(NSString *)path;
2),判断path这个路径是否是一个目录
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory;
示例:
BOOL isDir;
[fm fileExistsAtPath:filePath isDirectory:&isDir];
if (isDir) {
NSLog(@"这是一个目录");
}else{
NSLog(@"这不是一个目录");
}
3),判断path这个文件或文件夹是否可读
- (BOOL)isReadableFileAtPath:(NSString *)path;
4),判断path这个文件或文件夹是否可写
- (BOOL)isWritableFileAtPath:(NSString *)path;
5),判断path这个文件或文件夹是否可删除
- (BOOL)isDeletableFileAtPath:(NSString *)path;
4,NSFileManager基本用法
1),获得path这个文件\文件夹的属性
- (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error;
2),查找给定路径下的所有子路径,返回一个数组
- (NSArray *)subpathsAtPath:(NSString *)path;
3),获得path的所有子路径,跟2)的方法功能一样。(不是使用递归的方式获取的)
- (NSArray *)subpathsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;
4),获得path的当前子路径(path下的所有直接子内容,path必须是一个目录)
- (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;
5),获取指定目录下的文件及目录信息(不在获取后代路径)
- (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;
//------------------------------------------------------------------------------------
下午:
5,NSFileManager深入用法
1),创建目录
参数: 1,路径;2,是否自动创建路径中的所有文件夹;3,文件夹属性; 4,错误信息
- (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error
2),创建文件
参数:1,路径;2,NSData类型的数据;3,文件的属性;
- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;
/************************/
字符串转NSData:(NSData 是一个处理二进制数据的类)
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; *****
/************************/
3),拷贝文件,从srcPath这个路径拷贝到dstPath这个路径
- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;
4),移动文件,从srcPath这个路径移动到dstPath这个路劲
- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;;
5),删除文件
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error;
三,iOS沙盒机制
应用沙盒一般包括以下几个文件目录:Documents、Libaray(下面有Caches和 Preferences目录)、tmp。
1,Documents:保存应用运行时生成的需要持久化的数据,iTunes会自动备份该目录。苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录 。
2,Library:存储程序的默认设置和其他状态信息,iTunes会自动备份该目录。
1),Libaray/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除。一 般存放体积比较大,不是特别重要的资源。
2),Libaray/Preferences:保存应用的所有偏好设置,ios的Settings(设置)应用会在该目录中查找 应用的设置信息,iTunes会自动备份该目录。
3,tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也有可能会清除该目录下的文件,iTunes不会同步该目录。iphone重启时,该目录下的文件会丢失。
代码:
1,获取沙盒根目录的方法
NSString *sandBoxPath = NSHomeDirectory();
2,获取沙盒根目录,返回绝对路径 Documents
参数:1,NSDocumentDirectory 表示获取沙盒的Documents目录;2,NSUserDomainMas 用户主目录中;3,YES/NO 是否获取全路径;
NSArray *paths= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
3,Cache目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
4,Libaray目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
/*************************************************************/
//拼接字符串 stringByAppendingPathComponent
NSString *str = [filePath stringByAppendingPathComponent:@"Preferences/1.txt"];
/*************************************************************/
5,tmp目录
NSString *tmpDir = NSTemporaryDirectory();
|
|