对于drawRect使用,谨慎使用!
#1.drawRect简介
drawRect方法在UIView的使用上起着十分关键的作用。不知道大家注意过没有,每一次创建UIView子类文件时候,会有自动带有已注释的drawRect方法,也许从这一点就能看出这个方法的重要性。
该方法定义在UIView(UIViewRendering)分类里面,望文生义,该方法完成视图的绘制。
#2.什么情况下会调用drawRect
视图第一次显示的时候会调用。这个是由系统自动调用的,主要是在UIViewController中loadView和viewDidLoad方法调用之后;
如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用;
该方法在调用sizeThatFits后被调用,所以可以先调用sizeToFit计算出size,然后系统自动调用drawRect:方法;
通过设置contentMode属性值为UIViewContentModeRedraw,那么将在每次设置或更改frame的时候自动调用drawRect:;
直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,但是有个前提条件是rect不能为0;
注释:如果初始化一个view的时候,没有使用initWithFrame:方法,drawRect将不会被调用
#3.drawRect造成对象复用,引起内存暴增
注:在drawRect方法中创建一个新的对象,重复执行[self addSubview:view];会导致对象重复创建,导致视图错误,内存暴增,小心使用
#4.drawRect性能优化原则
1)绘制图形性能的优化最好的办法就是不去绘制。
2)利用专有图层代替绘图需求。
3)不得不用到绘图尽量缩小视图面积,并且尽量降低重绘频率。
4)异步绘制,推测内容,提前在其他线程绘制图片,在主线程中直接设置图片。
对于drawRect使用,谨慎使用!的更多相关文章
- 谨慎使用Marker Interface
之所以写这篇文章,源自于组内的一些技术讨论.实际上,Effective Java的Item 37已经详细地讨论了Marker Interface.但是从整个Item的角度来看,其对于Marker In ...
- 用drawRect的方式实现一个尺子
用drawRect的方式实现了一个尺子选择器,demo在这里:https://github.com/Phelthas/LXMRulerView 效果如图: 如果不考虑复用的问题,我感觉最简单的实现 ...
- UIView的layoutSubviews和drawRect方法何时调用
首先两个方法都是异步执行.layoutSubviews方便数据计算,drawRect方便视图重绘. layoutSubviews在以下情况下会被调用: 1.init初始化不会触发layoutSubvi ...
- 谨慎使用Sql server data tool 架构比对排除
现象:某个架构始终不能更新 VS中使用SSDT很方便,进行架构比对时,可以选择性的更新.但在排除操作上,要相当谨慎.往往排除的并不是一个差异项. 如下图,表或视图的差异,如果有多处,可以选 ...
- Oracle索引梳理系列(十)- 直方图使用技巧及analyze table操作对直方图统计的影响(谨慎使用)
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- iOS - drawRect致内存增加
GPU VS CPU iOS - 软件绘图 自定义"斑马线背景"View,重写drawRect绘制斑马线: ⚠️ 仅仅添加这一个View,内存就比正常增加了3-5M之间. 测试源代 ...
- drawRect与setNeedsDisplay简单介绍
- (void)drawRect:(CGRect)rect { } p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: ...
- little tips of painter.drawRect in Qt
一个QImage或QPixmap新建变量时,第一次填充图片时设置的宽高正常(fill),其后的绘制操作(draw)则会在绘制的矩形底边和右边加上painter.pen().width() 在下面代码1 ...
- layoutSubviews 与 drawRect
layoutSubviews总结 ios layout机制相关方法 - (CGSize)sizeThatFits:(CGSize)size- (void)sizeToFit——————- - (voi ...
随机推荐
- destoon ip接口失效修改 修改后偶尔会加载很慢
因为百度ip转换增加了密匙验证,所以导致之前的接口无法再转换ip地址的信息,修复方法如下:打开include\cloud.func.php文件搜索: function iplookup($ip) { ...
- DeepFaceLab小白入门(5):训练换脸模型!
训练模型,是换脸过程中最重要的一部分,也是耗时最长的一部分.很多人会问到底需要多少时间?有人会告诉你看loss值到0.02以下就可以了.我会告诉你,不要看什么数值,看预览窗口的人脸.看第二列是否和第一 ...
- 什么是python中的元类
所属网站分类: python高级 > 面向对象 作者:goodbody 原文链接: http://www.pythonheidong.com/blog/article/11/ 来源:python ...
- Django之模型---ORM 多表操作
多表操作 创建表模型 from django.db import models # Create your models here. class Author(models.Model): nid = ...
- SQL前后端分页
/class Page<T> package com.neusoft.bean; import java.util.List; public class Page<T> { p ...
- Mysql操作规范
(1)linux下开启.关闭.重启mysql服务命令 一. 启动1.使用 service 启动:service mysql start2.使用 mysqld 脚本启动:/etc/inint.d/mys ...
- hdu2604 递推转换矩阵快速幂
刚开始还以为用位运算与或几下几个循环就搞定了,算着算着发现不行........ 还是一种固定的切题角度,我假设有长度为n,总的排列数位f(n),怎么算他呢?从后往前考虑,因为大多数情况,都是用前面的结 ...
- Numpy+Pandas读取数据
1.为什么使用Numpy+Pandas 在使用Numpy读取csv文件时,文件中含有字符串时,会出现ValueError错误 2.Pandas读取csv文件:
- UVa 10110 Light, more light
开始所有的灯是灭的,不过我们只关心最后一个灯. 在第i次走动时,只有编号为i的倍数的灯的状态才会改变. 也就是说n有偶数个约数的时候,最后一个灯的状态不会改变,也就是灭的. n有奇数个约数的时候也就是 ...
- 编程哲学之 C# 篇:007——如何创造万物
上帝拥有创建万物的能力,本文介绍创造万物的道,让你也拥有上帝般创造万物的能力! 道 中国哲学家,道家学派创始人--老子,在<道德经>写到: 道生一,一生二,二生三,三生万物 那么,是什么 ...