setNeedsDisplay和setNeedsLayout两个方法都是异步的,setNeedsDisplay会自动调用drawRect,
而setNeedsLayout会自动调用layoutSubviews。
layoutSubviews方便数据计算,drawRect方便视图重绘。
假设我们采用的是直接调用drawRect的机制,先考虑这样一个问题 ,,现在有两个UIViewController A和B,A为当前view的viewController,如果此时在A中调用[B.view drawRect],这样B的view无论如何都会调用drawRect的方法重新绘制一遍,这样问题就出来了,有必要吗,毕竟现在显示的是A中的view!B重新绘制一遍就调用了drawRect中的方法,完全是在浪费系统资源啊,而通过setNeedsDisplay,ios就会很聪明的判断出不需要调用drawRect的方法,这样就避免了资源的重复调用!
同理,setNeedsLayout也采用了同样的机制来避免资源的重复利用!