性能優(yōu)化- SDWebImage 和 YYWebImage

主 Bundle 欄

Paste_Image.png

重點關注

**
表格的性能優(yōu)化:
1.行高一定要緩存 ;
2.不要動態(tài)創(chuàng)建子視圖 ;
<1>所有子視圖都預先創(chuàng)建 ;
<2>如果不需要顯示可以設置 hidden ;
3.所有子視圖都應該添加到 contentView 上 ;
因為 cell 有一個功能就是側滑可以調出刪除按鈕,或者添加選項等功能,如果我們的子視圖不在 contentView 上到時候要是有這個側滑的需求的話修改量很大!
4.所有子視圖都必須指定背景顏色 ;
<1>UIView 的背景顏色不設置的話 push 推出的時候會卡頓 ;
<2>NavigationController 的背景顏色如果不設置右上角會有黑條陰影,用戶體驗不好
5.所有顏色都不要使用透明度 alpha ;
如果設置了透明度圖層之間會有一個多層的渲染的過程,對性能的消耗非常大!尤其是 cell 里所有的顏色都不要使用 alpha,因為在快速滾動的時候,系統(tǒng)總想快速計算這個渲染的結果, 好讓 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

/**

    表格的性能優(yōu)化:
    1.行高一定要緩存 ;
    2.不要動態(tài)創(chuàng)建子視圖 ;
        <1>所有子視圖都預先創(chuàng)建 ;
        <2>如果不需要顯示可以設置 hidden ;
    3.所有子視圖都應該添加到 contentView 上 ;
        因為 cell 有一個功能就是側滑可以調出刪除按鈕,或者添加選項等功能,如果我們的子視圖不在 contentView 上到時候要是有這個側滑的需求的話修改量很大!
    4.所有子視圖都必須指定背景顏色 ;
        <1>UIView 的背景顏色不設置的話 push 推出的時候會卡頓 ;
        <2>NavigationController 的背景顏色如果不設置右上角會有黑條陰影,用戶體驗不好
    5.所有顏色都不要使用透明度 alpha ;
        如果設置了透明度圖層之間會有一個多層的渲染的過程,對性能的消耗非常大!尤其是 cell 里所有的顏色都不要使用 alpha,因為在快速滾動的時候,系統(tǒng)總想快速計算這個渲染的結果, 好讓 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

熱愛分享,熱愛開源

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末儡司,一起剝皮案震驚了整個濱河市届谈,隨后出現的幾起案子京髓,更是在濱河造成了極大的恐慌,老刑警劉巖序调,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異兔簇,居然都是意外死亡发绢,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門垄琐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來边酒,“玉大人,你說我怎么就攤上這事狸窘《针” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵翻擒,是天一觀的道長氓涣。 經常有香客問我,道長陋气,這世上最難降的妖魔是什么劳吠? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮巩趁,結果婚禮上痒玩,老公的妹妹穿的比我還像新娘。我一直安慰自己议慰,他們只是感情好凰荚,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著褒脯,像睡著了一般便瑟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上番川,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天到涂,我揣著相機與錄音脊框,去河邊找鬼。 笑死践啄,一個胖子當著我的面吹牛浇雹,可吹牛的內容都是我干的。 我是一名探鬼主播屿讽,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼昭灵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伐谈?” 一聲冷哼從身側響起烂完,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诵棵,沒想到半個月后抠蚣,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡履澳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年嘶窄,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片距贷。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡柄冲,死狀恐怖,靈堂內的尸體忽然破棺而出忠蝗,到底是詐尸還是另有隱情现横,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布什湘,位于F島的核電站长赞,受9級特大地震影響,放射性物質發(fā)生泄漏闽撤。R本人自食惡果不足惜得哆,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哟旗。 院中可真熱鬧贩据,春花似錦、人聲如沸闸餐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舍沙。三九已至近上,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拂铡,已是汗流浹背壹无。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工葱绒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斗锭。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓地淀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親岖是。 傳聞我的和親對象是個殘疾皇子帮毁,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內容