性能优化- SDWebImage 和 YYWebImage

主 Bundle 栏

Paste_Image.png

重点关注

**
表格的性能优化:
1.行高一定要缓存 ;
2.不要动态创建子视图 ;
<1>所有子视图都预先创建 ;
<2>如果不需要显示可以设置 hidden ;
3.所有子视图都应该添加到 contentView 上 ;
因为 cell 有一个功能就是侧滑可以调出删除按钮,或者添加选项等功能,如果我们的子视图不在 contentView 上到时候要是有这个侧滑的需求的话修改量很大!
4.所有子视图都必须指定背景颜色 ;
<1>UIView 的背景颜色不设置的话 push 推出的时候会卡顿 ;
<2>NavigationController 的背景颜色如果不设置右上角会有黑条阴影,用户体验不好
5.所有颜色都不要使用透明度 alpha ;
如果设置了透明度图层之间会有一个多层的渲染的过程,对性能的消耗非常大!尤其是 cell 里所有的颜色都不要使用 alpha,因为在快速滚动的时候,系统总想快速计算这个渲染的结果, 好让 cell 显示,这样的话运算量过大
6.cell 栅格化 ;
7.异步绘制 ;
**

ViewController.m 文件

#import "ViewController.h"
//@import SDWebImage ;
#import "YYWebImage.h"
//YYWebImage 如果需要播放动图,需要使用`YYAnimatedImageView`专门播放动图用的!
#import "MDTableViewCell.h"
NSString *const cellIdentifier = @"cellIdentifier" ;

@interface ViewController () <UITableViewDataSource , UITableViewDelegate>

@end

/**

    表格的性能优化:
    1.行高一定要缓存 ;
    2.不要动态创建子视图 ;
        <1>所有子视图都预先创建 ;
        <2>如果不需要显示可以设置 hidden ;
    3.所有子视图都应该添加到 contentView 上 ;
        因为 cell 有一个功能就是侧滑可以调出删除按钮,或者添加选项等功能,如果我们的子视图不在 contentView 上到时候要是有这个侧滑的需求的话修改量很大!
    4.所有子视图都必须指定背景颜色 ;
        <1>UIView 的背景颜色不设置的话 push 推出的时候会卡顿 ;
        <2>NavigationController 的背景颜色如果不设置右上角会有黑条阴影,用户体验不好
    5.所有颜色都不要使用透明度 alpha ;
        如果设置了透明度图层之间会有一个多层的渲染的过程,对性能的消耗非常大!尤其是 cell 里所有的颜色都不要使用 alpha,因为在快速滚动的时候,系统总想快速计算这个渲染的结果, 好让 cell 显示,这样的话运算量过大
    6.cell 栅格化 ;
    7.异步绘制 ;
 
 */
@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self prepareTableView] ;
    
}

#pragma mark - prepareTableView
- (void)prepareTableView {
    UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain] ;
    tableView.dataSource = self ;
    tableView.delegate = self ;
    [tableView registerClass:[MDTableViewCell class] forCellReuseIdentifier:cellIdentifier] ;
    tableView.rowHeight = 100 ;
    [self.view addSubview:tableView] ;
    
}

#pragma mark - <UITableViewDataSource>
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1 ;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 100 ;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath] ;
    NSURL *url = [NSURL URLWithString:@"http://imglf0.ph.126.net/WAAJPGdYwngSJ5_0nq6YAA==/6608699301143989092.gif"] ;
    UIImage *image = [UIImage imageNamed:@"avatar"] ;
    [cell.imageView yy_setImageWithURL:url placeholder:image] ;
//    [cell.imageView sd_setImageWithURL:url placeholderImage:image] ;
    return cell ;
}

/*
    要保证表格良好的用户体验,刷新帧率应该在50+才是高品质的动画~人眼识别24帧就已经是较好的动画效果了!
    真机测试要用`旧手机`才能测出性能!
 */

@end

重点关注

**
//Rasterize:栅格化 ;
self.layer.shouldRasterize = YES ;
//但是Rasterize栅格化之后 gif 图会有模糊的现象,
//所以Rasterize栅格化必须必须指定分辨率!!!
self.layer.rasterizationScale = [UIScreen mainScreen].scale ;
//2.异步绘制:
//UIKit 有一个特点,他的更新都是在主线程里更新的,这也是为什么主线程又被称为 UI 线程!
//apple 关于异步绘制的介绍非常少:
//这句话加上之后就可以实现异步绘制:
//apple 的官方文档提到过这个,只说了一句如果 cell 比较复杂可以使用,平时不建议使用~
self.layer.drawsAsynchronously = YES ;**

MDTableViewCell.m 文件

#import "MDTableViewCell.h"
#import "YYWebImage.h"
@implementation MDTableViewCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier] ;
    if (self) {
        //如果不这么写的话是不能加载动图的,动图是不动的 ;
        //YYAnimatedImageView 是专门加载动图用的 ;
        //利用 KVC 来修改 imageView 的类型:
        /*
            @property (nonatomic, "readonly", strong, nullable) UIImageView *imageView NS_AVAILABLE_IOS(3_0);   // default is nil.  image view will be created if necessary.
         
            给 UITableViewCell 这个类的 imageView 属性做修改!把 imageView 属性修改为 YYAnimatedImageView 属性 ;
            imageView 属性是不能修改的,因为他是只读属性~所以只能用 KVC 方法:
         */
        
        [self setValue:[[YYAnimatedImageView alloc] init] forKey:@"imageView"] ;
        
        /**
         栅格化:美工术语 , 将 cell 中的所有内容 , 生成一张独立的图像 ;
         在滚动的过程中 , 我们并没有点击 cell 与 cell 交互,所以在滚动时,我们让 cell 整体变成一张图像,只显示这张图像 ;
         */
        //1.下面这两句话是让程序性能飞起来的`平凡之路`!!!
        //Rasterize:栅格化 ;
        self.layer.shouldRasterize = YES ;
        //但是Rasterize栅格化之后 gif 图会有模糊的现象,
        //所以Rasterize栅格化必须必须指定分辨率!!!
        self.layer.rasterizationScale = [UIScreen mainScreen].scale ;
        //2.异步绘制:
        //UIKit 有一个特点,他的更新都是在主线程里更新的,这也是为什么主线程又被称为 UI 线程!
        //apple 关于异步绘制的介绍非常少:
        //这句话加上之后就可以实现异步绘制:
        //apple 的官方文档提到过这个,只说了一句如果 cell 比较复杂可以使用,平时不建议使用~
        self.layer.drawsAsynchronously = YES ;
    }
    return self ;
}

@end

热爱分享,热爱开源

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容