iOSProgramming: The Big Nerd Ranch Guide (4th Edition) 阅读笔记-关于 View 的 Redrawing 和 Run Loop

关于View Redrawing Run Loop

  • application 启动后,它会开始一个 run loop 用以监听如触摸一类的事件。当事件触发时,run loop 会寻找合适的处理事件方法,这个处理方法又会调用其他方法来处理,一旦所有方法被执行完毕,控制权会被交还给 run loop
  • run loop 重新获得控制权后,它会检查一个名为 dirty list 的列表,其中包含需要重新绘制的 view 。然后 run loop 会在整个 hierarchy 中的 view 被重新叠加在一起前,发送 drawRect: 消息给 dirty list 中的 view
  • 需要优化的部分(以便保持界面随时可响应):
    • 只重新渲染必要的 view
    • 每个 event 只发送一次 drawRect:  消息
    • run loop 的最后批量处理需要重绘的 view 以避免不必要的重复重绘
  • 当完成了对事件的响应,并将控制权交还给 run loop 后,若该 view 发生了改变,则还需要将该 view 加入 dirty list。原生的 view 会自动进行这项工作,而自定义的 view 则需要手动向它自身发送 setNeedDisplay 消息。
  • 可选的优化方法(不常用):
    • 通过发送 setNeedsDisplayInRect: 消息,只标记 view 的一部分需要重绘。
    • 该方法比较复杂且对性能没有显著提升,因此除非重绘过程明显拖慢了 app ,否则一般不使用。

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值