/*
1, What is block? Please write a simple example to block;
答: block 是一个代码块,比如一些其它Web编程语言的"匿名函数".在objc中通常使用block实现代理方法实现的功能,也就是回调.使用代理需要设置代理数据接收者,而且代理方法是被分离开来处理的,block可以将这些分离的代码放到一个代码块中.
typedef void(^myBlock)(int value);
@property (nonatomic, copy) myBlock block;
- (void)setMyblock:(void(^)(int value))block;
- (void)setMyblock:(void (^)(int))block {
if (block) {
self.block = block;
}
}
*/
/*
2, Can we use two tableview controllers on one viewcontroller?
答: 从技术角度上分析, 一个控制器内部添加两个表格控制器是没有问题的, 通过addChildViewController:
*/
/*
3, What is lazy loading?
答: 延迟加载(懒加载): 当需要用到该对象的时候, 再去创建对象, 合理利用空间.
比如:控制器的view, 在第一次用到时才调用loadView方法进行创建.
*/
/*
4, What is NSOperation queue?
答: NSOperationQueue 操作队列, 用来管理多个操作任务, 为每一个任务安排对应的子线程. 可实现线程同步和线程并发.
*/
/*
5, Is there any garbage collection mechanism in Objective-C?
答: <1> OC 1.0 没有垃圾回收
<2> OC 2.0 有垃圾回收, 只能用在Mac上
<3> iOS中有ARC机制, 是编译器特性, 垃圾回收是运行时特性.
*/
/*
6, Difference between method and selector?
答: method:包含整个方法的定义: 返回值类型,方法名,参数,参数类型,方法体.而selector是通过方法名找到方法地址,从而判断该方法是否存在.
*/
/*
7, Difference between frame and bounds?
答: frame:该view在父view坐标系统中的位置和大小. (参照点:父视图的坐标系).
bounds:该view在本地坐标系中的位置和大小.(参照点:本地坐标系)
*/
/*
8, What is responder chain
答: 凡是直接或者间接继承自UIResponser 的类创建的对象都是响应者.比如(UIview, UIviewController, UIApplication). 由响应者对象组成的链叫响应者链.
当触摸视图时, 系统会有碰撞检测过程,查找该触摸发生到哪个视图上.
UIApplication->window->视图口控制器->根视图->视图1->视图2 碰撞检测结束之后,接下来对触摸时间做出处理, 首先查看视图2是否对触摸事件做出处理, 如果视图2不处理, 则把事件漏给视图1, 直到有一个对象处理了, 如果都没处理,则事件丢弃
*/
/*
9, 堆和栈的区别?
答: a, 堆栈空间分配区别:
栈:由操作系统自动分配释放, 存放函数的参数值, 局部变量的值等.其操作方式类似与数据结构中的栈,先进后出.
堆:一般有开发人员分配,若开发人员不释放, 程序结束时由系统回收, 分配方式类似于链表, 堆区用来开辟的空间和回收空间的操作分别是malloc和free.
b, 内存分配和读取效率区别:
栈:由系统自动分配, 速度快, 但是程序员无法控制.
堆:堆是由程序员自己分配, 速度较慢,容易产生碎片, 不过用起来方便,非常灵活.
c, 申请大小不同:
栈: 栈是向低地址扩展的数据结构, 是一块连续的内存区域, 栈顶的地址和栈的最大容量是系统预先规定好的, 能从栈获得的空间较小
堆:
*/