表格性能优化--部分

作者: marlonxlj | 来源:发表于2017-01-17 15:10 被阅读37次

表格性能优化--部分

时间:2017-1-16

Demo下载地址

  1. xcode 查找快捷键:command + shift + o
  2. 进入到当前这个文件:command + shift + j
  3. 选择替换:commadn+shift+e

Xcode常用功能和快捷键

Command+[ -> 代码块左移

Comamnd+] -> 代码块右移

Tab -> 接受代码自动完成提示

Esc -> 显示代码提示

Command+B -> 编译

Command+R -> 运行

Control+F -> 前移光标

Control+B -> 后移光标

Control+P -> 光标移到上一行

Control+N -> 光标移到下一行

Control+A -> 光标移到行首

Control+E -> 光标移到行尾

Control+T -> 交换光标左右字符

Control+D -> 删除光标右边的字符

Control+K -> 删除本行

Control+L -> 将光标所在位置置于窗口中央

按住Option双击鼠标 -> 搜索文档

Command+Y -> 激活/禁用断电

Command+Control+Y -> 继续运行

F6 -> 单步跳过

F7 -> 单步跳入

F8 -> 跳出

Cocoa Touch 框架:


Cocoa Touch Layer
Media Layer
Core Services Layer
Core OS Layer

从上到下依次为Cocoa Touch、Media、Core Services、Core OS。

Cocoa Touch层:包含创建iOS应用程序所需的关键框架。上至实现应用程序可视界面,下至与高级系统服务交互,都需要该层技术提供底层基础。基本系统服务和关键框架(Address Book UI、UIKit等)UIKit Framework

  • Media层:包含图形技术、音频技术和视频技术,这些技术相互结合就可为移动设备带来最好的多媒体体验,更重要的是,它们让创建外观音效俱佳的应用程序变得更加容易。Core Graphics Framework,Core Animation Framewrok,AV Foundation Framework

  • Core Services层:为所有的应用程序提供基础系统服务。可能应用程序并不直接使用这些服务,但它们是系统很多部分赖以建构的基础。Core Data Framewrok, Core Foundation Framework,Foundation Framework

  • Core OS层:Core OS层的底层功能是很多其他技术的构建基础。通常情况下,这些功能不会直接应用于应用程序,而是应用于其他框架。但是,在直接处理安全事务或和某个外设通信的时候,必须要应用到该层的框架。
    Accelerate Framework,System Framework


SDWebImage Gif处理利用ImageIO的函数

内存问题:内存释放不会立即执行,播放动图,但是会占用大量的内存

解决办法:

1.开启一个时间,CADisplayLink(每次屏幕屏幕都会触发)
2.每次触发,递增index只加载一帧,之前的图像立即释放

YY_WebImage 如果要显示动图,需要使用YYAnimatedImageView
利用KVC修改imageView的类型
[self setValue:[[YYAnimatedImageView alloc] init] forKey:@"imageView"]

    CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);
    //获取到gif动图的帧数
    size_t count = CGImageSourceGetCount(source);

    UIImage *animatedImage;
    //判断图片数量,如果是1,直接返回静态图像
    if (count <= 1) {
        animatedImage = [[UIImage alloc] initWithData:data];
    }
    else {
         //创建图像数据:真正消耗性能的根源
        NSMutableArray *images = [NSMutableArray array];

        NSTimeInterval duration = 0.0f;

        for (size_t i = 0; i < count; i++) {
             //取出第i帧
            CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);
                //累加时长
            duration += [self sd_frameDurationAtIndex:i source:source];
                //把图像添加到数据
            [images addObject:[UIImage imageWithCGImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]];
                //释放图像
            CGImageRelease(image);
        }

        if (!duration) {
            duration = (1.0f / 10.0f) * count;
        }
         //设置动图数组
        animatedImage = [UIImage animatedImageWithImages:images duration:duration];
    }

    CFRelease(source);

    return animatedImage;

表格性能测试,一定要在真机上运行,真机的内存比模拟器小很多,CPU架构和模拟器完全不一样

模拟器:Color Offscreen-Rendered离屏幕渲染

Debug Options:

  • Color Blended Layers 混合图层
  • Color Hits Green and Misses Red
  • Color Copied Images
  • Color Immediately
  • Color Misaligned Images 图像拉伸的
  • Color Offscreen_rendered Yellow 离屏幕渲染
  • Color Compositing Fast-Path Blue
  • Flash Updated Regions

iOS Core Animation Advanced Techniques(中文).pdf中有三个重点需要看:性能调优、高效绘图、图层性能

Cell表格性能优化:

  • 行高一定要缓存
  • 不要动态创建子视图
    • 所有的子视图都要预先创建
    • 如果不需要显示可以设置hidden
  • 所有的子视图都应该添加到contentView
  • 所有的子视图都必须指定背景颜色
  • 所有的颜色都不要使用alpha
  • cell栅格化
  • 异步绘制
//1.栅格化,美工术语:将cell中的所有内容,生成一张独立的图像,在屏幕滚动时,只显示图像
self.layer.shouldRasterize = YES;
//1.1 栅格化,必须指定分辨率,否则默认使用*1,生成图像
self.layer.rasterizationScale = [UIScreen mainScreen].scale;
        
//2. 异步绘制:如果cell比较复杂,可以使用 self.layer.drawsAsynchronously = YES;

你是怎么测试性能的呢?使用单元测试
对UI测试可以使用猴子测试

AFN

1.图片太大,有可能不会缓存

2.使用的是系统默认的缓存

提问:如果使用SDWebImage加载图像,会显示指示器吗?

答:这个跟AFNetworking没有关系,不会显示指示器

🐼🐶🐶如果对你有帮助,或觉得可以。请右上角star一下,这是对我一种鼓励,让我知道我写的东西有人认可,我才会后续不断的进行完善。

有任何问题或建议请及时issues me,以便我能更快的进行更新修复。

Email: marlonxlj@163.com

相关文章

  • 表格性能优化--部分

    表格性能优化--部分 时间:2017-1-16 Demo下载地址 xcode 查找快捷键:command + sh...

  • 表格性能优化

    1、栅格化; 说明:栅格化是将cell中的所有内容生成一张独立的图像注意:必须指定分辨率,否则默认使用 *1 生成...

  • web前端开发编码规范及性能优化

    代码优化 这个部分仅仅将代码优化本身,不考虑性能,关于代码部分的性能优化在 页面渲染 部分 代码优化 中 HTML...

  • Webpack 优化总结

    webpack优化可以分为两部分: 开发环境性能优化 生产环境性能优化 开发环境性能优化 HMR: 热加载。 so...

  • UITablew性能优化之栅格化

    在oc中提起性能优化,莫过于UITabliew. 在表格优化中性能优化有以下几点需要注意. 1.不能在cell的代...

  • 2019-03-01.24(大数据量性能优化)

    大数据量性能优化: 1 . 列表优化 大型表单优化 表格优化 我们在修改数据的时候,视图就会有响应的变化,视图会去...

  • 公式化解决问题

    计算机性能优化有阿姆达尔法则,这个法则通过优化某部分的性能和这部分在整个系统中占用的时间来推算部分优化后对整个系统...

  • 使用Webpack4优化Web性能

    利用 Webpack 来优化 Web 性能属于加载性能优化 的一部分: ☛ Web Performance Opt...

  • 性能优化--公共部分

    这个世界上有很多编辑语言,几乎在任意一个编程语言中都有性能优化这个课题。性能优化需要根据语言、系统等具体的特性来具...

  • 网络部分性能优化

    看了Joy一篇关于网络部分优化的文章,总结一下,方便以后查阅使用 目前客户端存在的网络问题主要有下面几方面: 1....

网友评论

    本文标题:表格性能优化--部分

    本文链接:https://www.haomeiwen.com/subject/ymbmbttx.html