ios面试8

23 、UITableView有哪些优化方式
1、提前计算并缓存好高度(布局),因为heightForRowAtIndexPath:是调用最频繁的方法;
2、异步绘制,遇到复杂界面,遇到性能瓶颈时,可能就是突破口;
3、滑动时按需加载,这个在大量图片展示,网络加载的时候很管用
4、Cell的复用
5、尽量少使用或者不用透明的图层
6、用异步加载数据,缓存请求结果
7、减少subView的数量
8、异步刷新
9、提前注册
24 、请简述iOS中的事件传递机制
点击一个UIView或产生一个触摸事件A,这个触摸事件A会被添加到由UIApplication管理的事件队列中(即,首先接收到事件的是UIApplication)。
UIApplication会从事件对列中取出最前面的事件(此处假设为触摸事件A),把事件A传递给应用程序的主窗口(keyWindow)。
窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件。
事件交由第一响应者对象处理,如果第一响应者不处理,事件被沿着响应链向上传递,交给下一个响应者,直到事件被丢弃
GCD取消
GCD原生并不支持取消操作。
dispatch_suspend函数也只能暂停开启新的未执行的block,已经处于执行中的block是无法暂停的。
【ios面试8】但是,通过参考NSOperation的cancel机制,你只要加一个外边变量,用于标记block是否需要取消。然后block中通过及时的检测这个外部变量的状态,当发现需要取消时,停止block中的后续操作,释放资源。就能达到及时取消block的目的。这里有个例子:https://github.com/Tinghui/HUIGCDDispatchAsync

    推荐阅读