每个不成熟的开发者都有这样的场景,知道某个知识点 实际应用的时候,必须打开百度Google才能完成,比如iOS中的本地操作,每次都要翻过。
iOS沙盒机制
1.介绍
沙盒:在受限的安全环境中运行应用程序的一种做法,这种做法是要限制授予应用程序的代码访问权限。
iOS正是这样的沙盒机制,也就是说每个iOS程序只能在为该程序创建的文件系统中读取文件,例如一些图片声音等。
2.沙盒目录
iOS模拟器的文件在mac上是隐藏的,通过打印路径也能找到,我们需要在终端做一点操作。
显示文件:
defaults write com.apple.finder AppleShowAllFiles -bool true
隐藏文件:
defaults write com.apple.finder AppleShowAllFiles -bool false
然后退出终端,重新启动Finder。
Xcode6以前的模拟器目录是这样的
/Users/username/Library/Application Support/iPhone Simulator/
现在的目录做了改变
/Users/your name/Library/Developer/CoreSimulator/Devices/your number/data/Containers/Data/Application/
默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。因为应用的沙盒机制,应用只能在几个目录下读写文件
- Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
- Library:存储程序的默认设置或其它状态信息;
- Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
- tmp:提供一个即时创建临时文件的地方。
- iTunes在与iPhone同步时,备份所有的Documents和Library文件。
- iPhone在重启时,会丢弃所有的tmp文件
具体文件操作
获取程序的Home目录
NSString *homeDirectory = NSHomeDirectory();
NSLog(@"path:%@", homeDirectory);
获取document,cache,library等目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
将方法中NSDocumentDirectory替换即可
这是一个枚举,里面有各种搜索路径
typedef NS_ENUM(NSUInteger, NSSearchPathDirectory)
我们可以借助这个做一些简单的应用,比如图片的存取
NSArray *array = [[NSArray alloc] initWithObjects:@"hello",nil];
NSString *filePath = [homeDirectory stringByAppendingPathComponent:@"Pictures"];
[array writeToFile:filePath atomically:YES];
然后就可以通过NSPicturesDirectory的路径打印出来了
NSArray *data = [[NSArray alloc]initWithContentsOfFile:filePath];
NSLog(@"%@", data);
NSFileManager
官方给文件操作封装的处理类
An NSFileManager object lets you examine the contents of the file system and make changes to it.
首先创建fileManager
NSFileManager *fileManager = [NSFileManager defaultManager];
上文中创建Pictures,在这里我们就可以用另一种方法
[fileManager createFileAtPath:filePath contents:[string dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
文件管理这个类有很多很多用法,撸主无法一一列出,具体可以直接去看官方文档,很详细,用处也一目了然。这里有一些用法可以看看。
网友评论