内存泄漏分为四大类:
(1)常发生内存泄漏:发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块
内存泄漏.
(2)偶发生内存泄漏.发生内存泄漏的代码只有在某些特定的坏境或者操作过程下才会发生;
(3)一次性内存泄漏.发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总
会有一块仅且一块内存发生泄漏;
(4)隐式内存泄漏 程序在运行的过程中不停的分配内存, 但是直到结束的时候才释放内存,
对于运行周期很长的服务器,不及时释放会耗尽内存;
十 说说响应者链条?
响应者链条是一条由 UIResponder 的子类组成的链条,它们都能够响应时间,由事件的最佳相
应者起,如果它是控制器的 view 的话,它的上一级响应者就是这个控制器,否则就是它的父控
件;控制器的上一级响应者是它父控制器的 view,最终一直到 window.
十一. CGD 的底层实现
iOS 和 OS X 的核心是 XNU 内核, GCD 是基于 XUN 内核实现的
GCD 的 API 全部在 libdispatch 库中
GCD 的底层实现主要有 Dispatch Queue 和 Dispatch Source
Dispatch Queue:管理 block 操作
Dispatch Source:处理事件
十二. Notification 是同步还是异步?kvo 是同步还是异步
包括代理,这些都是同步的;监听和回调都是在同一个线程中执行
十三. Objective C 中的 selector 是什么?
可以理解@selector()就是取类方法的编号,他的行为基本可以等同 C 语言中的函数指针,只不
过 C 语言中,可以吧函数名之间赋给一个函数指针,而 Objective-C 的类不能之间应用函数指
针,这样只能做一个@selector 语法来取.
它的结果是一个 SEL 类型,这个类型的本质是累方法的编号(函数地址).方法以 selector 为索
引.selector 的数据类型是 SEL 定义成 char*,我们可以把它想象成 int .每个方法的名字对应一
个唯一的值.
十四. 那些操作是属于私有 api 的范畴?
私有 API 是指存放在 PrivateFrameworks 框架中的 API 是苹果明确不能使用的 API 也可以
说 一般在官方文档和头文件中看不到,但是实际存在于框架中的 API 就是私有 API,具体在
提交应用的时候回自动检测.
私有 API 的存在很大一部分是为了保护隐私和系统安全,进制开发者使用这些功能.但是由于
Objective-C 的动态特性 ,使得实际上不可能存在真正意义的阻止调用这些 API.
十五. frame 和 bounds 有什么不同
frame 的位置是相对父空间的左上角来说的 参照的是父类的坐标系,指的是空间在父控件内
的位置和大小
bounds 的位置是相对控件自身的左上角来说的,参照的是自身坐标系,指的是自己本身的大小