移动端 -- IOS开发知识点总结

工作之余,总结一下这几年IOS开发知识点。

1. NSString为什么要用copy关键字,用strong会有什么问题

对源头是NSMutableString的字符串,strong仅仅是指针引用,增加了引用计数器,这样源头改变的时候,用这种strong方式声明的变量(无论被赋值的变量是可变的还是不可变的),它也会跟着改变;而copy声明的变量,它不会跟着源头改变,它实际上是深拷贝。

对源头是NSString的字符串,无论是strong声明的变量还是copy声明的变量,当第二次源头的字符串重新指向其它的地方的时候,它还是指向原来的最初的那个位置,也就是说其实二者都是指针引用,也就是浅拷贝。

另外说明一下,这两者对内存计数的影响都是一样的,都会增加内存引用计数,都需要在最后的时候做处理。

其实说白了,对字符串为啥要用这两种方式?我觉得还是一个安全问题,比如声明的一个NSString *mStr变量,然后把一个NSMutableString *str变量的赋值给它了,如果要求mStr跟着str变化,那么就用strong;如果mStr不能跟着str一起变化,那就用copy。而对于要把NSString类型的字符串赋值给mStr,那两都没啥区别。不会影响安全性,内存管理也一样。

2. iOS持久化方式有哪些

因为iOS的沙盒机制,所以持久化分为两类:沙盒内和沙盒外。

沙盒内:

NSKeyedArchiver  遵循了NSCoding协议 归档解档

NSUserDefaults     

plist    

数据库sqlite3

沙盒外:

KeyChain

沙盒内的方式在应用被删除后数据都会丢失,如果想要不丢失则需要使用KeyChain。

KeyChain本质是一个sqlite数据库,其保存的所有数据都是加密过的。

KeyChain分为私有和公有,公有则需要指定group,一个group中的应用可以共享此KeyChain。

使用KeyChain过程中要理解下面几个问题:

1:自己使用的KeyChain和系统自带的KeyChain数据是隔离的,内部应该是不同数据库文件;

2:KeyChain数据可备份到iCloud中;

3:不需要联网,也不用登陆iCloud账号;一个设备一个sqlite数据库,但是不同应用组不共享数据;

4:要在另一台设备上使用当前设备存储的KeyChain信息,需要当前设备进行数据备份,

再在另一设备上复原数据;比较常用的是iCloud备份方式;

5:系统自带的KeyChain中账号密码分类数据可在系统设置->账号与密码里面看到,

你退出iCloud账号还是存在,只是iCloud会帮你备份如果你设置了的话;这个和照片是一样的道理。

3. id和NSObject*的区别

id可以指向oc中的任何对象,而NSObject*只能指向NSObject及子类对象。

4. runtime是什么

https://www.jianshu.com/p/19f280afcb24

5. KVC/KVO

https://blog.csdn.net/yuwuchaio/article/details/80701681

6. Property修饰符

https://blog.csdn.net/shenzhonglaoxu/article/details/47807081

你可能感兴趣的:(移动端 -- IOS开发知识点总结)