`
iaiai
  • 浏览: 2195587 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于ios中的setNeedsDisplay和setNeedsLayout

 
阅读更多
我们可能对这两个命令并不陌生,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的重复利用等等。
分享到:
评论

相关推荐

    ios-动画边框输入框.zip

    同时,为了优化性能,他们可能会在合适的时机调用setNeedsDisplay和setNeedsLayout方法来刷新视图布局和绘制。 对于标签“文本输入”,我们可以理解这个组件不仅关注外观,还关注输入行为。因此,...

    ios源码之数字时钟DigiClock.rar

    DigiClock可能使用setNeedsDisplay或setNeedsLayout方法来通知系统需要更新界面,而不是在每次时间变化时都强制重绘。此外,如果DigiClock支持动画效果,例如秒针的平滑转动,那么可能使用Core Animation来实现这一...

    收集百度、阿里等100家企业面试题合集

    以上知识点是根据提供的内容中出现的技术术语和概念整理的,具体到每一项的深入内容,需要结合iOS开发的具体环境和上下文进行详细的学习和实践。此外,由于原始文档扫描识别问题,部分描述可能存在误差,需要结合...

    iOS学习入门教程附有Demo

    5. 更新视图:通过setNeedsLayout和setNeedsDisplay方法,可以告诉系统视图需要重新布局或重绘。 本教程的Demo部分将包含实际的代码示例,让你有机会亲手实践这些理论知识,通过动手操作加深理解。通过跟随教程学习...

    ios-卡牌切换效果.zip

    同时,为了保证动画的流畅性,可能还需要对视图的渲染层次进行合理管理,例如使用CALayer的`shouldRasterize`属性,以及适时使用`setNeedsDisplay`和`setNeedsLayout`方法。 在提供的压缩包中,"WX20171017-164257@...

    ios-阴影遮罩.zip

    开发者可能会注意避免不必要的内存分配,如在需要时才创建和更新阴影和遮罩,或者利用`setNeedsDisplay:`和`setNeedsLayout:`方法来控制重绘和重新布局。 综上所述,"ios-阴影遮罩.zip"这个压缩包中的代码可能包含...

    ios-画圈圈.zip

    6. **重绘视图**:当圆圈的属性(如半径、颜色)发生变化时,你需要调用`setNeedsDisplay()`或`setNeedsLayout()`来通知系统视图需要重新绘制或布局。 7. **响应式设计**:确保你的画圈功能在不同尺寸和方向的屏幕...

    iOS 实现简单画圆弧

    调用`setNeedsDisplay`或`setNeedsLayout`方法,让视图重新绘制。 除了基本的圆弧,还可以通过组合多个圆弧或者利用`CGContextAddArcToPoint`函数创建更复杂的曲线形状。此外,`UIBezierPath`类提供了更高级的API...

    IOS应用源码——饼状图代码cakyTest.zip

    以下是关于iOS应用中实现饼状图的关键知识点: 1. **Core Graphics框架**:在iOS中,通常使用Core Graphics框架来绘制自定义图形,包括饼状图。这个框架允许开发者直接在图形上下文中进行低级绘图操作,比如画线、...

    IOS面试题2018总结188题

    ### IOS面试题2018总结188题知识点概览...以上内容涵盖了 iOS 开发面试中可能遇到的核心知识点,包括但不限于语言特性、框架使用、设计模式以及系统架构等方面。掌握这些知识点对于成为一名合格的 iOS 开发者至关重要。

    DCIntrospect-ARC:酷炫的DCIntrospect调试工具ARC已准备就绪

    #DCIntrospect-ARC 推特: 网站: : 最初由完成,是用于iOS的一工具,可帮助调试使用UIKit构建的用户界面。 对于动态创建的UI布局或在运行时可以更改的UI布局,或者...手动调用setNeedsDisplay,setNeedsLayout

    iOS中多线程的经典崩溃总结大全

    iOS开发中多线程崩溃是非常常见的,下面将总结一些经典的崩溃场景和解决方法: 1. Block回调崩溃: 在MRC环境下,使用Block来设置下载成功的图片。当self释放后,weakSelf变成野指针,接着就悲剧了。解决方法是...

    100家企业iOS招聘需求整理

    - **NSInteger**:Objective-C中的整型别名,用于提高代码兼容性和可读性。 ### 19. 枚举与结构体 - **枚举**:一组命名的常量集合。 - **结构体**:包含多个成员的复合数据类型。 ### 20. 类别与扩展 - **...

    iOS游戏应用源代码——digdog-MapKitDragAndDrop-3.2-1-gfe8441a.zip

    6. 地图更新:在拖放结束后,需要调用`setNeedsDisplay()`或`setNeedsLayout()`方法,让MapKit重新绘制地图以显示新的元素位置。 7. 错误处理与边界检测:为了防止元素被拖放到地图的不可见区域,需要进行边界检测...

    iOS 代码划线

    如果需要根据用户交互改变线条,可以监听触摸事件或者使用其他反馈机制,在`drawRect:`之外的适当位置更新视图的属性,然后调用`setNeedsDisplay`或`setNeedsLayout`来触发重绘。 通过以上步骤,你可以在iOS应用中...

    ios-自定义按钮.zip

    在iOS开发中,系统提供了UIButton类用于创建和管理按钮,但有时为了满足特定的设计需求或者增强用户体验,开发者可能会选择自定义按钮。这个“ios-自定义按钮.zip”压缩包文件包含了一个自定义按钮的实现,它继承自...

    仿淘宝宝贝数量增减调整控件

    4. 视图更新:当用户改变商品数量时,控件会实时更新显示,这涉及到UI界面的刷新机制,如使用setNeedsDisplay或setNeedsLayout方法。 5. 事件响应:为了实现与用户交互,控件需要监听并响应用户的点击和长按事件。...

    iOS布局渲染之UIView方法的调用时机详解

    在iOS应用开发中,UI设计和布局是至关重要的部分,而理解UIView的渲染流程和方法调用时机则是优化用户体验的关键。本文将深入探讨iOS布局渲染中的UIView方法调用时机,帮助开发者更好地掌握视图的创建、布局更新和...

    kbk.rar_Kbk皮肤

    在iOS中,可能需要调用`setNeedsDisplay()`或`setNeedsLayout()`方法。 6. **性能优化**:尽管动态皮肤更换提高了用户体验,但频繁的重绘可能会对性能产生影响。因此,开发者应优化代码,确保在不影响性能的前提下...

    UI基础与教学

    在UI设计领域,尤其是iOS开发中,用户界面(UI)是至关重要的部分,因为它直接影响到用户的体验和应用程序的可用性。本教程将深入探讨UI的基础,特别是关于`UIView`的初始化及其基本应用。 `UIView`是iOS开发中最...

Global site tag (gtag.js) - Google Analytics