关于ios中的setNeedsDisplay和setNeedsLayout
来源:互联网 发布:java mq消息队列详解 编辑:程序博客网 时间:2024/05/16 09:09
1、在Mac OS中NSWindow的父类是NSResponder,而在iOS 中UIWindow 的父类是UIVIew。程序一般只有一个窗口但是会有很多视图。
2、UIView的作用:描画和动画,视图负责对其所属的矩形区域描画、布局和子视图管理、事件处理、可以接收触摸事件、事件信息的载体、等等。
3、UIViewController 负责创建其管理的视图及在低内存的时候将他们从内存中移除。还为标准的系统行为进行响应。
4、LayOutSubViews 可以在自己定制的视图中重载这个方法,用来调整子视图的尺寸和位置。
5、UIView的setNeedsDisplay和setNeedsLayout方法。首先两个方法都是异步执行的。而setNeedsDisplay会自动调用drawRect方法,这样可以拿到UIGraphicsGetCurrentContext,就可以画画了。而setNeedsLayout会默认调用layoutSubViews,就可以处理子视图中的一些数据。
我们可能对这两个命令并不陌生,setNeedsDisplay调用drawRect方法来实现view的绘制,而setNeedsLayout则调用layoutSubView来实现view中subView的重新布局,问题是为何要如此设计呢,直接调用drawRect和layoutSubView不是更省事吗,何必多次一举呢。
假设我们采用的是直接调用drawRect的机制,先考虑这样一个问题 ,,现在有两个UIViewController A和B,A为当前view的viewController,如果此时在A中调用[B.view drawRect],这样B的view无论如何都会调用drawRect的方法重新绘制一遍,这样问题就出来了,有必要吗,毕竟现在显示的是A中的view!B重新绘制一遍就调用了drawRect中的方法,完全是在浪费系统资源啊,而通过setNeedsDisplay,ios就会很聪明的判断出不需要调用drawRect的方法,这样就避免了资源的重复调用!
同理,setNeedsLayout也采用了同样的机制来避免资源的重复利用!
由此我们可以推断出这中设计的精妙之处,ios由很多精妙的设计来缓解手机资源不足的现状,比如cell的重复利用等等。
原文连接:http://hi.baidu.com/wyr0408/item/7c386ae57bdbd7c4bbf37dda
2、UIView的作用:描画和动画,视图负责对其所属的矩形区域描画、布局和子视图管理、事件处理、可以接收触摸事件、事件信息的载体、等等。
3、UIViewController 负责创建其管理的视图及在低内存的时候将他们从内存中移除。还为标准的系统行为进行响应。
4、LayOutSubViews 可以在自己定制的视图中重载这个方法,用来调整子视图的尺寸和位置。
5、UIView的setNeedsDisplay和setNeedsLayout方法。首先两个方法都是异步执行的。而setNeedsDisplay会自动调用drawRect方法,这样可以拿到UIGraphicsGetCurrentContext,就可以画画了。而setNeedsLayout会默认调用layoutSubViews,就可以处理子视图中的一些数据。
我们可能对这两个命令并不陌生,setNeedsDisplay调用drawRect方法来实现view的绘制,而setNeedsLayout则调用layoutSubView来实现view中subView的重新布局,问题是为何要如此设计呢,直接调用drawRect和layoutSubView不是更省事吗,何必多次一举呢。
假设我们采用的是直接调用drawRect的机制,先考虑这样一个问题 ,,现在有两个UIViewController A和B,A为当前view的viewController,如果此时在A中调用[B.view drawRect],这样B的view无论如何都会调用drawRect的方法重新绘制一遍,这样问题就出来了,有必要吗,毕竟现在显示的是A中的view!B重新绘制一遍就调用了drawRect中的方法,完全是在浪费系统资源啊,而通过setNeedsDisplay,ios就会很聪明的判断出不需要调用drawRect的方法,这样就避免了资源的重复调用!
同理,setNeedsLayout也采用了同样的机制来避免资源的重复利用!
由此我们可以推断出这中设计的精妙之处,ios由很多精妙的设计来缓解手机资源不足的现状,比如cell的重复利用等等。
原文连接:http://hi.baidu.com/wyr0408/item/7c386ae57bdbd7c4bbf37dda
0 0
- iOS 关于ios中的setNeedsDisplay和setNeedsLayout
- 关于ios中的setNeedsDisplay和setNeedsLayout
- 关于ios中的setNeedsDisplay和setNeedsLayout
- 关于ios中的setNeedsDisplay和setNeedsLayout
- 关于ios中的setNeedsDisplay和setNeedsLayout
- 关于ios中的setNeedsDisplay和setNeedsLayout
- 关于ios中的setNeedsDisplay和setNeedsLayout
- IOS setNeedsDisplay 和 setNeedsLayout
- [IOS]setNeedsDisplay和setNeedsLayout
- iOS UIView setNeedsDisplay和setNeedsLayout
- 转:关于setNeedsDisplay和setNeedsLayout
- iOS-UIView常用的setNeedsDisplay和setNeedsLayout
- IOS setNeedsDisplay setNeedsLayout注意
- IOS setNeedsDisplay setNeedsLayout
- 关于setNeedsDisplay、setNeedsLayout方法
- setNeedsDisplay和setNeedsLayout
- setNeedsDisplay和setNeedsLayout
- setNeedsDisplay和setNeedsLayout
- Hibernate merge、update与saveOrUpdate方法的区别
- 区间DP题集(个别未完成)
- 深度学习鼻祖杰夫·辛顿及巨头们的人才抢夺战
- dos查看jar运行异常
- nginx+resin集群
- 关于ios中的setNeedsDisplay和setNeedsLayout
- css 之 ime-mode(只能输入数字的实现方法)
- NSValue 结构体转化位对象(包装结构体)
- java中“类”和“对象”到底有什么联系
- 6656 Watching the Kangaroo
- JS C# 获取浏览器类型
- 什么是ODBC 连接池?
- Java字符串转Json对象
- HTML5中设置自适应设备头的各个参数及意义