1.响应者链是什么?
所有继承自UIResponder的类都是一个响应者,它们可以对系统产生的事件,如点击屏幕做出响应。UIView和UIControl都是UIResponder的派生类,所以它们都可以是响应者。同一个项目中的所有响应者,按着一定的顺序来处理接收到的消息,如果前面的响应者做了响应,则后面的响应者不再接收到事件;如果前面的没做出响应,则后面的响应者会接收到事件,并决定是否做出响应。这种处理事件的响应顺序,就叫做响应者链。
2.static 关键字的作用?
(1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次, 因此其值在下次调用时仍维持上次的值;
(2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明 它的模块内;
(4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝; (5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。
3.extern "C" 的作用
(1)被 extern "C"限定的函数或变量是 extern 类型的;
extern 是 C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器, 其声明的函数和变量可以在本模块或 其它模块中使用。
(2)被 extern "C"修饰的变量和函数是按照 C 语言方式编译和连接的
4.程序在内存中运行时,内存分几个区?各自用途?
栈区 由编译器自动分配释放存放函数的参数值,局部变量的值等。在高级语言中不需要显式的分配和释放
堆区 一般由程序员手动分配释放,如果不释放可有由OS释放。数据区 存储全局和静态变量。初始化的全局和静态变量在一块区域,未初始化的放在相邻的一块区域,程序结束后由系统释放。
代码区 存放函数体的二进制代码。
引用是给变量起一个别名 也就是一个变量有两个名字 他们是同一块空间
指针是分配一块内存用来保存变量的地址 间接引用变量
6.什么时候用delegate,什么时候用Notification?
delegate针对one-to-one关系,并且reciever可以返回值给sender,notification可以针对one-to-one/many/none,reciever无法返回值给sender.所以,delegate用于sender希望接受到 reciever的某个功能反馈值,notification用于通知多个object某个事件。
7.层和UIView的区别是什么?
两者最大的区别是,图层不会直接渲染到屏幕上,UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由CoreAnimation来实现的。它真正的绘图部分,是由一个CALayer类来管理。UIView本身更像是一个CALayer的管理器。一个UIView上可以有n个CALayer,每个layer显示一种东西,增强UIView的展现能力。
8.HTTP协议的主要特点可概括?
1.支持客户/服务器模式。
2.简单快速(:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。)
3.灵活(:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。)
4.无连接:(无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。)
5.无状态:(HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。)
9.死锁的4个必要条件
互斥、请求保持、不可剥夺、环路
10.堆栈溢出的原因
① 没有回收垃圾资源,存储空间垃圾太多,内存已满
② 层次太深的递归调用,重复调用自己导致内存不足
③ 动态申请的内存忘记释放,几new 和 delete
11.死锁的处理
鸵鸟策略、预防策略、避免策略、检测与解除死锁