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是无法暂停的。

但是,通过参考NSOperation的cancel机制,你只要加一个外边变量,用于标记block是否需要取消。然后block中通过及时的检测这个外部变量的状态,当发现需要取消时,停止block中的后续操作,释放资源。就能达到及时取消block的目的。这里有个例子:https://github.com/Tinghui/HUIGCDDispatchAsync

你可能感兴趣的:(ios面试8)