1.int const *p和int *const p的区别
被const修饰的内容不可变。
1.const修饰的是✽p,那么✽p就是常量,不能通过✽p 修改p所指向的存储空间的值。P是变量,可以被赋值,p所指向的地址可以变化。
2.const修饰的是p,那么p是常量,其所指向的地址不能变化。✽p是变量,其所指向的存储空间的值可以变化。
2.数组与指针
/*
初始化一个长度为3的整型数组。
&array = &array[0]。
一个int类型占4个人字节,所以array占12个字节
*/
int array[3] = {1, 2, 3};
int *k = (int *)&array;
/*
k+1就是array的地址(&array[0])+4(k占用的字节数*1) = &array[1]
为什么= &array[1]?因为数组array存储的是整型int
*/
NSLog(@"%d",*(k+1)); //输出 2
//&array + 1就是array的地址(&array[0])+12(array所占用的字节数*1)
k = (int *)(&array + 1);
//*(k-1),获取 k的地址-4(k占用的字节数*1)所存储的内容 = &array[2]
NSLog(@"%d",*(k-1)); //输出 3
结论: 指针变量 ± 数值 = 变量当前地址 ± (变量所占的字节数 * 数值),即 k ± n = k ± (sizeof(k) * n)。
3.沙盒
1、应用程序包:包含了所有的资源文件和可执行文件
2、Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录
3、tmp:保存应用运行时所需要的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行,系统也可能会清除该目录下的文件,iTunes不会同步备份该目录
4、Library/Cache:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不备份该目录。一般存放体积大、不需要备份的非重要数据
5、Library/Preference:保存应用的所有偏好设置,IOS的Settings应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录
// 沙盒的路径
let homeDirectory = NSHomeDirectory() as String
// 沙盒的子层级(library/documents/tmp)
let rootPath = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true)[0]
// 创建新的文件夹
let path = rootPath.appending("/ONCE/App")
try! FileManager.default.createDirectory(atPath: path, withIntermediateDirectories: false, attributes: nil)
重点: createDirectory(atPath path: String, withIntermediateDirectories createIntermediates: Bool, attributes: [FileAttributeKey : Any]? = nil)的入参createIntermediates需要传入一个Bool值,传true/false的区别在于,true:将创建任何必要的中间目录(即使不存在ONCE的文件夹,那么将会先创建ONCE,在创建App),false:中间目录不存在,就会crash
5. self/super/superclass
// self 是类的隐藏参数,指向当前调用方法的这个类的实例
// super它本质是一个编译器标示符,和 self 是指向的同一个消息接受者!
NSLog(@"%@",NSStringFromClass([self class])); // 意思是:获取当前类的class
NSLog(@"%@",NSStringFromClass([super class])); // 意思是:告诉self,去调用父类的class方法
NSLog(@"%@",NSStringFromClass([self superclass])); // 意思是:self去获取父类