.1.数据的持久化:plist文件,对象归档,数据库,coredata
2.KVO:键值观察:是一种能使对象获取其他对象变化通知机制
3.KVC:间接访问对象实例变量,可以不通过存取方法访问实例变量
4.浅复制(retain):并不拷贝对象本身,仅仅是拷贝指向对象的指针
5.深复制(copy):直接拷贝整个对象内存到另一块内存中
【再简单些说:浅复制就是指针拷贝;深复制就是内容拷贝。】
在非集合类对象中(系统非集合类对象指的是 NSString, NSNumber ... 之类的对象):对immutable对象进行copy操作,是指针复制,mutableCopy操作时内容复制;对mutable对象进行copy和mutableCopy都是内容复制。用代码简单表示如下:
[immutableObject copy] // 浅复制
[immutableObject mutableCopy] //深复制
[mutableObject copy] //深复制
[mutableObject mutableCopy] //深复制
在集合类对象中(集合类对象是指NSArray、NSDictionary、NSSet ... 之类的对象),对immutable对象进行copy,是指针复制,mutableCopy是内容复制;对mutable对象进行copy和mutableCopy都是内容复制。但是:集合对象的内容复制仅限于对象本身,对象元素仍然是指针复制。用代码简单表示如下:
[immutableObject copy] // 浅复制
[immutableObject mutableCopy] //单层深复制
[mutableObject copy] //单层深复制
[mutableObject mutableCopy] //单层深复制
6.对MVC的理解:
M:(model) 数据模型--》存储 定义 操作数据
V:(view) 表示视图--》用户操作交互
C: (Controller) 控制器--》获取数据 显示在表示视图上面
7.一个APP中有一个button,在手触摸屏幕点击后,到button收到点击事件,中间发生过程?【从响应者链来说】
1.设备将touch到的UITouch和UIEvent对象打包,放到当前活动的Application事件队列中
2.单例的UIApplication会从事件队列中取出触摸事件并传递给单例UIWindow
3.UIWindow调用方法查找touch操作的所在视图view
8.UIResponder 是 UIView的 父类 UIView 是 UIControl的父类
9.为什么实用copy申明NSString,若用Strong会有什么问题?
父类可接受子类对象(NSString是NSMUtableString的父类),实用copy是为了不受外界影响,无论是可变还是不可变,保证本身持有一个不可变副本 如果使用strong 那么属性有可能指向一个可变对象,如果这个可变对象被外部修改了,那么影响该属性
10.进程 线程 区别 联系
区别:一个线程只能属于一个进程,线程是操作系统识别的最小执行和调度单位。
一个进程可以有很多个线程,但至少有一个线程。
资源分配给进程,同一进程的所有线程共享该进程的所有资源。 同一进程中的多个线程 共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程 拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。
11. 对RunLoop的理解
什么是RunLoop?
从字面上看:运行循环、跑圈
其实它内部就是do-while循环,在这个循环内部不断的处理各种任务(比如Source、Timer、Observer)
一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop需要手动启动(调用run方法)
RunLoop只能选择一个Mode启动,如果当前Mode中没有任何Soure、Timer、Observer,那么就直接退出RunLoop
在开发中如何使用RunLoop?什么应用场景?
开启一个常驻线程(让一个子线程不进入消亡状态,等待其他线程发来消息,处理其他事件)
在子线程中开启一个定时器
在子线程中进行一些长期监控
可以控制定时器在特定模式下执行
可以让某些事件(行为、任务)在特定模式下执行
可以添加Observer监听RunLoop的状态,比如监听点击事件的处理(在所有点击事件之前做一些事情