2018年10月25日 iOS面试 router
1.router
https://github.com/BTCheok/BTBank
----------------------------
1.kvo,kvc
2.@property申明对象属性时copy与strong的区别
3.block copy与strong的区别
4.gpuimage架构
5.在一个视频上加张图片合成视频的时间
6.视频采集AVCaptureSession yuv转rgb
7.ytknetworking缓存
1.算法:两个数组找重复数字
2.客户端及时通讯系统架构
//-------------------------------
在UIView上绘制图片
这部分代码可以在这里看到。
1. 使用原图
得到的FPS实在可怜,只有不到10。
2. 裁剪图片到66*66
FPS可以达到55以上,效果还是不错的,毕竟使用drawRect主要是耗费CPU的资源,而iPhone4的CPU是现在市面上最差的。
3. 裁剪图片到66*66,并设置layer.cornerRadius和masksToBounds
FPS基本上在23上下,效果很差,之所以会导致帧率下降的如此厉害主要是这两个属性会导致离屏渲染。离屏渲染(offscreen rending)在2011年的WWDC中的Session 121 Understanding UIKit Rendering有提到过,如果发生离屏渲染,会导致Core Animation创建额外的缓冲区,被称作offscreen buffer,然后在offscreen buffer中绘制图片,然后在将结果渲染到onscreen buffer中。这里产生了额外的内存创建、额外的绘制操作、还有onscreen和offscreen的切换,所以离屏渲染产生时我们的帧率下降的非常明显。
4. 裁剪图片到66*66,clip掉图片的圆角区域
FPS在55以上,可以想象得到其与第二个case是一样的,他们都是66*66的图片,只是图片的内容略有不同而已。
https://github.com/kudocc/blog/blob/master/2016-06/show_many_images_in_UIScrollView.md
fps
_labelFps = [[CCFPSLabel alloc] initWithFrame:CGRectMake(44, ScreenHeight-100, 0, 0)];
[self.view addSubview:_labelFps];
https://www.github.com/wangzhaomeng/LLVisualLog/
测试帧率的方法是使用Profiling中的Core Animation。
https://www.jianshu.com/p/439e158b44de
3.2.1 观测的指标
Core Animation相关的检查选项:
Color Blended layers 勾选这个选项后,blended layer 就会被显示为红色,而不透明的layer则是绿色。我们希望越少红色区域越好。
Color Hits Green and Misses Red
如果shouldRasterize被设置成YES,对应的渲染结果会被缓存,如果图层是绿色,就表示这些缓存被复用;如果是红色就表示缓存会被重复创建,这就表示该处存在性能问题了。如果光栅化的层变红得太频繁那么光栅化对优化可能没有多少用处。位图缓存从内存中删除又重新创建得太过频繁,红色表明缓存重建得太迟。可以针对性的选择某个较小而较深的层结构进行光栅化,来尝试减少渲染时间。
Color copied images
这个选项主要检查我们有无使用不正确图片格式,若是GPU不支持的色彩格式的图片则会标记为青色,则只能由CPU来进行处理。我们不希望在滚动视图的时候,CPU实时来进行处理,因为有可能会阻塞主线程。
Color misaligned images
这个选项检查了图片是否被放缩,像素是否对齐。被放缩的图片会被标记为黄色,像素不对齐则会标注为紫色。
Color Offscreen-Rendered Yellow 开启后会把那些需要离屏渲染的图层高亮成黄色,这就意味着黄色图层可能存在性能问题。
https://blog.csdn.net/elisa1988/article/details/79788063
https://www.jianshu.com/p/e47a061bf3e5
https://blog.csdn.net/yjs_13597468160/article/details/80069899