NSBundle路径问题

先上图
NSBundle路径问题

上面是一个程序文件的主要路径图,我们平时获取默认路径或者保存文件路径的两种方式:

NSString * bundlepath = [[NSBundle mainBundle]resourcePath]

结果:
/Users/tyrantxz/Library/Developer/CoreSimulator/Devices/A010629C-B166-426B-B8CA-82EF57777F6D/data/Containers/Bundle/Application/E88A5515-5BA3-4CB7-84CC-F5D139E6EA3E/testview.app/

NSString* documentpath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];

结果:
/Users/tyrantxz/Library/Developer/CoreSimulator/Devices/A010629C-B166-426B-B8CA-82EF57777F6D/data/Containers/Data/Application/AF9FA867-7210-4FAB-945F-B9619B068B15/Documents

这两者什么区别呢?

从路径上看,一个在Bundle目录下,一个在Data目录下,从上图看,Bundle目录最后是当前的执行程序,程序其实是就是个“bunlde”,可以以文件方式打开程序,里面存放的是除了代码外的资源文件,包括plist,storyboard等,也就是说,以资源为主。

另一个Data目录,最后目录如下:
NSBundle路径问题

可以看到,这就是所谓的”沙箱”目录,即只允许自己的程序访问,别的程序不允许访问,主要是用来存储数据和备份的。

这就是两个路径的区别,个人理解,bundle下的资源是即时访问的,data下的数据是可以间断调用的,正是因为这种区别,所以我们一般会将bundle下的数据文件copy到data/documents/下,方便对其进行读写,网上说是因为bundle中文件只能读不能写,这点笔者专门test了一下,证明是可以写的。

上一篇:iOS 键盘弹出视图上移


下一篇:通过JSON实现NSString,NSDictionary(NSArray)相互转化