iOS 沙盒与 Bundle

发布于 2025-03-24 21:27 802 字 5 min read

前端项目通过bridge获取客户端资源,客户端直接返回response对象常用代码模板1——基础算法常用代码模板2——数据结构统计iOS工程代码行数高数概念、公式、定理Objective-C 语法 3Objective-C 语法 2Objective-C 语法 1UIViewController 的生命周期UITableview调用reload方法时抖动问题UILabel中文带行间距的处理,限制行数,计算高度等UIButton扩大点击范围以及关于响应者链条的思考UIApplicationSwiftUI基本控件iPhone6 Plus上面神秘的缝隙iPhone 刘海机型UI适配(X、Xs、Xs Max、Xr)iOS:如何在UITableView调用reloadData刷新结束后再同步执行后续操作iOS 截取整个 scrollview 图片iOS 关于 UITextField 的字数限制Objective-C 中禁止调用指定的方法objc源码分析-runtime-classObjective-C Type EncodingsObjective-C:为什么分类中不能直接添加属性OC优缺点以及常见bugruntime——运行时简单使用当对象接收到不能处理的消息时调用的方法浅谈iOS中的weak为 UIControl 实现线程安全的 Block 事件扩展:原理与实践OC单例宏iOS常用数据类型转换OC中nil 、NULL、 Nil 、NSNull的区别Description方法和NSLog函数Block in Objective-CiOS自动化埋点的实现iOS平台编译Ogre游戏引擎库iOS:特殊符号大全iOS 网络小结iOS 沙盒与 BundleiOS 框架学习-AsyncSocketNSString的各种处理Swift Module 如何被全局引用CocoaPods组件化——OC/Swift动静态库混用COCOAPODS技巧-创建私有仓库关于NSNotificationCenter数据结构与算法解析习题2.23数据结构与算法解析习题2.19数据结构与算法解析习题2.16数据结构与算法解析习题2.14数据结构与算法解析习题2.13数据结构与算法解析习题2.12数据结构与算法解析习题2.11:二分查找数据结构与算法解析习题2.10:霍纳法则(Horner's rule)数据结构与算法解析习题2.7数据结构与算法解析习题1.3数据结构与算法解析习题1.2数据结构与算法解析习题1.1LeetCode 486 Predict the Winner(预测赢家)LeetCode 398 随机数索引LeetCode 106 Construct Binary Tree from Inorder and Postorder Traversal(由中序和后序遍历建立二叉树)LeetCode 70 爬楼梯(青蛙跳台阶)LeetCode 8 String to Integer (atoi)LeetCode 6 ZigZag Conversion(Z字转换)LeetCode 5 Longest Palindromic Substring(最长回文字串)iOS脚本打包 ipa(.app转.ipa)《什么是数学 》习题 第一章 补充《什么是数学 》习题 第一章 2 数系的无限性 数学归纳法《什么是数学 》习题 第一章 1 整数的计算Vue 的一些指令和缩写
iOS 沙盒机制 沙盒是系统为每一个应用程序生成的一个特定文件夹 ,文件夹的名字由十六进制数据组成,每一个应用程序的沙盒文件名都是不一样的,是由系统随机生成的。在iOS中,为了安全性,这个文件夹别的 app 是不可以访问的。理论上 app 只能在自己的沙盒里存取文件,除了一些系比较特殊的数据储存方式

iOS 沙盒机制

沙盒是系统为每一个应用程序生成的一个特定文件夹 ,文件夹的名字由十六进制数据组成,每一个应用程序的沙盒文件名都是不一样的,是由系统随机生成的。在iOS中,为了安全性,这个文件夹别的 app 是不可以访问的。理论上 app 只能在自己的沙盒里存取文件,除了一些系比较特殊的数据储存方式,如 keychain ,iCloud, iOS11 新增的 file 等等。

沙盒下一共有三个目录:

  1. Documents 目录:您应该将所有的应用程序数据文件写入到这个目录下,这个目录用于存储用户数据或其它应该定期备份的信息。
  2. Library 目录:这个目录下有两个子目录:Caches 和 Preferences。
    • Caches目录用于存放应用程序专用的支持文件,保存应用程序再次启动过程中需要的信息,存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出后删除。
    • Preferences 目录包含应用程序的偏好设置文件。您不应该直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序的偏好。
  3. tmp 目录:这个目录用于存放临时文件,保存应用程序再次启动过程中不需要的信息,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除。

注意:iTunes在与iPhone同步时,备份所有的Documents和Library文件。iPhone在重启时,会丢弃所有的tmp文件。

// 沙盒主目录
NSString *homeDir = NSHomeDirectory();
NSLog(@"%@", homeDir);

// Documents 路径
NSString *docDir1 = [homeDir stringByAppendingPathComponent:@"Documents"];
NSLog(@"%@", docDir1);

/**
参数
1. NSDocumentDirectory 搜索路径的类型
2. NSUserDomainMask    在iOS上固定的
3. 是否展开波浪号        YES
*/
NSString *docDir2 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSLog(@"%@", docDir2);

// Caches路径 
NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; NSLog(@"%@", cacheDir);

// tmp路径
NSString *tmpDir = NSTemporaryDirectory();
NSLog(@"%@", tmpDir);

//  Preferences偏好设置目录,保存手机常用设置信息,用户的个人信息,例如用户名,密码
// 直接使用setXXX方法赋值即可,无需获得路径
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"hehe" forKey:@"UserName"];
[defaults setBool:YES forKey:@"AutoLogin"];

// 默认情况下,往偏好设置保存数据,更新的非常慢,如果需要及时保存,需要使用一个同步方法
[defaults synchronize];

Bundle

Bundle 是一个资源文件包。我们将许多图片、文本文件、mp3等组织在一起,打包成一个 Bundle 文件。方便在其他项目中引用包内的资源。

Bundle是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不参加项目编译的。也就意味着,bundle包中不能包含可执行的文件。它仅仅是作为资源,被解析成为特定的二进制数据。

mainBundle 对应于应用程序文件归档或者应用程序的封包:一个以“.app”为扩展名并以应用程序名称为基本名的目录。

// mainBundle
NSString *bundlePath = [NSBundle mainBundle].bundlePath;
NSLog(@"%@", bundlePath);