1:MVC的理解
MVC设计模式考虑三种对象:数据模型对象,视图对象和控制器对象。
数据模型:负责存储、定义、操作数据;
视图:展示数据给用户,和用户进行操作交互;
控制器:M与V的协调者,控制获取数据,将数据交给视图去展示。
2:线程和进程
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位;
线程是进程的一个实体,是CPU调度和分派的一个基本单位,是比进程更小的一个独立运行的基本单位,线程基本上不拥有系统资源,只拥有一点在运行中必不可少的基本资源(如程序计数器,一组寄存器和栈),一个线程可是创建和撤销另一个线程。
线程和进程的关系:
一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程;
资源分配给进程,统一进程中的多个线程可以共享进程中的线程;
线程在执行过程中,要实现协作同步。不同进程的线程间要利用消息通信的办法实现同步;
真正在处理机上运行的是线程;
线程是进程内的一个可执行单元,也是进程内的可调度实体。
线程和进程的区别:
调度:线程作为调度和分配的基本单元,进程作为拥有资源的基本单位;
并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行;
拥有资源:进程是拥有资源的一个基本单位,线程不拥有系统资源,但可以访问隶属于进程的资源;
系统开销:创建或者撤销进程的开销比较大。(因为系统在这个过程中要分配或者撤销系统资源)
3:进程的同步机制
原子操作、信号量机制、自旋锁、分布式系统等
4:进程死锁的原因
资源竞争以及程序推进顺序非法
5:死锁的四个必要条件
互斥、请求保持、不可剥夺、环路
6:死锁的处理策略
鸵鸟策略、预防策略、检测与接触死锁
7:KVC、KVO
KVC、键值编码,是一种间接访问实例变量的一种机制,该机制可以不通过存取方法(get setter)就可以访问对象的实例变量;
KVO、键值观察,是一种能使得对象获取到其他对象变化的通知机制;
实现KVO键值观察模式,被观察的对象必须使用KVC的键值编码机制来修改它的实例变量,这样才能被观察者观察到。因此,KVC是KVO的基础,或者说KVO的实现是建立在KVC的基础之上。
8:深复制和浅复制
深复制:不仅复制对象本身,也要复制对象所持有的属性;
浅复制:只复制对象本身,而不对其属性进行复制。
9:定义属性的时候,什么时候用assign、retain、copy、nonatomic?
assign:普通赋值,一般用于基本数据类型,常见委托设计模式,以此来防止循环引用;
retain:保留计数,获得了对象的所有权。引用计数在原有基础上+1;
copy:一般在字符串中使用copy。Foundation中不可变对象使用copy效果相当于retain,只是引用计数+1;
nonatomic:非原子性访问,不加同步,多线程并发访问会提高性能。
10:strong与weak,_unsafe_unretained与weak的区别。
strong是强引用,weak是弱引用,在ARC中,strong相当于retain,weak相当于assign,要注意的一点是,即使在ARC情况下,代理的属性依然使用assign,以防止循环引用;
_unsafe_unretained与weak功能一致,区别在于当志向的对象销毁后,weak的指针将变为nil,防止出现野指针。
11:ARC存在内存泄露吗?
循环引用会导致内存泄露,Object-C与CoreCoundation进行桥接的时候如果管理不当也会造成内存泄露。
12:事件响应者链
响应者链表示一系列的响应者对象。事件被交给第一个响应者处理,如果第一响应者不处理,事件被沿着响应者链向上传递,交给下一个响应者(next responder),
View-ViewController-Window-Application-丢弃事件
13:SVN或者是git的使用
14:打包静态库
15:App发布的上架流程
16:Storyboard的使用
网友评论