UITableViewHeaderFooterView的復(fù)用問(wèn)題

前言

關(guān)于UITableViewCellUICollectionViewCell的復(fù)用想必大家已經(jīng)很清楚了,在此就不再啰嗦。不懂的朋友可以百度Google吧甥绿!

然而,關(guān)于UITableViewHeaderFooterView之前就發(fā)現(xiàn)了有這樣API, 如下:

// like dequeueReusableCellWithIdentifier:, but for headers/footers
- (UITableViewHeaderFooterView *)dequeueReusableHeaderFooterViewWithIdentifier:(NSString *)identifier 

發(fā)現(xiàn)后我就這樣使用:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    // headerView復(fù)用
    UITableViewHeaderFooterView *headerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"HeaderViewID"];
    if (headerView == nil) {
        headerView = [[RefreshHeaderView alloc] initWithReuseIdentifier:@"HeaderViewID"];
        NSLog(@"section: %ld", (long)section);
    }
    return headerView;
}

其實(shí)當(dāng)時(shí)也就想:蘋(píng)果官方出了這樣的API就是希望我們復(fù)用UITableViewHeaderFooterView吧则披!
當(dāng)時(shí)也沒(méi)有多想共缕,沒(méi)有考慮過(guò)復(fù)用和不復(fù)用的區(qū)別。昨天和一個(gè)公司朋友討論關(guān)于這個(gè)問(wèn)題士复,今天就研究了下图谷,且看接下來(lái)的內(nèi)容。

正文

其實(shí)UITableViewHeaderFooterView的原理與她們一樣阱洪。

  • 復(fù)用的測(cè)試代碼如下:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    // headerView復(fù)用測(cè)試情況
    UITableViewHeaderFooterView *headerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"HeaderViewID"];
    if (headerView == nil) {
        headerView = [[RefreshHeaderView alloc] initWithReuseIdentifier:@"HeaderViewID"];
        NSLog(@"section: -------> %ld", (long)section);
    }
    return headerView;
}

---------------------------------
#import <UIKit/UIKit.h>

@interface RefreshHeaderView : UITableViewHeaderFooterView

@end


#import "RefreshHeaderView.h"

@interface RefreshHeaderView ()

/**image*/
@property (nonatomic, strong) UIImageView *imageView;

@end

@implementation RefreshHeaderView

- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithReuseIdentifier:reuseIdentifier];
    if (self) {
        self.contentView.backgroundColor = [UIColor whiteColor];
        self.imageView = [[UIImageView alloc] init];
        self.imageView.frame = CGRectMake(10, 10, 30, 30);
        self.imageView.image = [UIImage imageNamed:@"stock"];
        [self.contentView addSubview:self.imageView];
        
        for (int i = 0; i < 10; i++) {
            UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50 + i * 20, 0, 100, 50)];
            label.text = @"呵呵";
            [self.contentView addSubview:label];
        }
    }
    return self;
}

@end
  • 復(fù)用的測(cè)試Log如下:
2017-01-19 09:38:07.516709 QJNetworking[4169:1311469] section: -------> 0
2017-01-19 09:38:07.518637 QJNetworking[4169:1311469] section: -------> 1
2017-01-19 09:38:07.519517 QJNetworking[4169:1311469] section: -------> 2
2017-01-19 09:38:07.520233 QJNetworking[4169:1311469] section: -------> 3
2017-01-19 09:38:07.520863 QJNetworking[4169:1311469] section: -------> 4
2017-01-19 09:38:07.521519 QJNetworking[4169:1311469] section: -------> 5
2017-01-19 09:38:07.522134 QJNetworking[4169:1311469] section: -------> 6
2017-01-19 09:38:07.522838 QJNetworking[4169:1311469] section: -------> 7
2017-01-19 09:38:07.523539 QJNetworking[4169:1311469] section: -------> 8
2017-01-19 09:38:07.524204 QJNetworking[4169:1311469] section: -------> 9
2017-01-19 09:38:07.524827 QJNetworking[4169:1311469] section: -------> 10
2017-01-19 09:38:07.525417 QJNetworking[4169:1311469] section: -------> 11
2017-01-19 09:38:07.526031 QJNetworking[4169:1311469] section: -------> 12
2017-01-19 09:38:11.855421 QJNetworking[4169:1311469] section: -------> 13
2017-01-19 09:38:11.963743 QJNetworking[4169:1311469] section: -------> 14
2017-01-19 09:38:12.986768 QJNetworking[4169:1311469] section: -------> 23
2017-01-19 09:38:13.520631 QJNetworking[4169:1311469] section: -------> 29
2017-01-19 09:38:15.380638 QJNetworking[4169:1311469] section: -------> 57
2017-01-19 09:38:15.480633 QJNetworking[4169:1311469] section: -------> 62
2017-01-19 09:38:15.547375 QJNetworking[4169:1311469] section: -------> 65
2017-01-19 09:38:15.635934 QJNetworking[4169:1311469] section: -------> 68
2017-01-19 09:38:16.047329 QJNetworking[4169:1311469] section: -------> 80
2017-01-19 09:38:16.097419 QJNetworking[4169:1311469] section: -------> 82
2017-01-19 09:38:16.180931 QJNetworking[4169:1311469] section: -------> 85
2017-01-19 09:38:17.654964 QJNetworking[4169:1311469] section: -------> 85
2017-01-19 09:38:17.729023 QJNetworking[4169:1311469] section: -------> 82
2017-01-19 09:38:17.812837 QJNetworking[4169:1311469] section: -------> 79
2017-01-19 09:38:18.281034 QJNetworking[4169:1311469] section: -------> 68
2017-01-19 09:38:18.365286 QJNetworking[4169:1311469] section: -------> 65
2017-01-19 09:38:18.480834 QJNetworking[4169:1311469] section: -------> 62
2017-01-19 09:38:18.997506 QJNetworking[4169:1311469] section: -------> 51
2017-01-19 09:38:19.114332 QJNetworking[4169:1311469] section: -------> 48
2017-01-19 09:38:19.469727 QJNetworking[4169:1311469] section: -------> 41
2017-01-19 09:38:19.553230 QJNetworking[4169:1311469] section: -------> 38
2017-01-19 09:38:19.680752 QJNetworking[4169:1311469] section: -------> 30
2017-01-19 09:38:19.747531 QJNetworking[4169:1311469] section: -------> 27
2017-01-19 09:38:19.797485 QJNetworking[4169:1311469] section: -------> 25
2017-01-19 09:38:19.849612 QJNetworking[4169:1311469] section: -------> 23
2017-01-19 09:38:20.068577 QJNetworking[4169:1311469] section: -------> 17
2017-01-19 09:38:20.118201 QJNetworking[4169:1311469] section: -------> 15
2017-01-19 09:38:20.164471 QJNetworking[4169:1311469] section: -------> 13
2017-01-19 09:38:20.179870 QJNetworking[4169:1311469] section: -------> 11
2017-01-19 09:38:20.196951 QJNetworking[4169:1311469] section: -------> 9
2017-01-19 09:38:20.213055 QJNetworking[4169:1311469] section: -------> 7
2017-01-19 09:38:20.249866 QJNetworking[4169:1311469] section: -------> 4
2017-01-19 09:38:20.262628 QJNetworking[4169:1311469] section: -------> 2
2017-01-19 09:38:20.833058 QJNetworking[4169:1311469] section: -------> 12

了解Cell的朋友應(yīng)該知道從上面的數(shù)據(jù)中可以看出便贵,UITableViewHeaderFooterView的復(fù)用原理完全與Cell一致。

接下來(lái)我們看看不復(fù)用的測(cè)試代碼

  • 不復(fù)用的測(cè)試代碼:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

    UIView *view = [[UIView alloc] init];
    NSLog(@"section: -------> %ld", (long)section);
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 30, 30)];
    imageView.image = [UIImage imageNamed:@"stock"];
    [view addSubview:imageView];
    for (int i = 0; i < 10; i++) {
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50 + i * 20, 0, 100, 50)];
        label.text = @"呵呵";
        [view addSubview:label];
    }
    return view;
}

接下來(lái)冗荸,我們看看大家最關(guān)心的內(nèi)存CPU使用情況

  • 不復(fù)用的內(nèi)存和CPU使用狀態(tài)
unreuse.gif
  • 復(fù)用的內(nèi)存和CPU使用狀態(tài)
reuse.gif

看了以上結(jié)果承璃,想必大家都明白了吧。

總結(jié):
  1. UITableViewHeaderFooterView復(fù)用原理與Cell相同
  2. UITableViewHeaderFooterView由于復(fù)用機(jī)制蚌本,顯然在CPU使用上更節(jié)省绸硕。

總之,正如官方一樣魂毁,推薦大家使用UITableViewHeaderFooterView復(fù)用機(jī)制。

如果本人有不對(duì)的地方出嘹,希望朋友可以糾正席楚,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末税稼,一起剝皮案震驚了整個(gè)濱河市烦秩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌郎仆,老刑警劉巖只祠,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異扰肌,居然都是意外死亡抛寝,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盗舰,“玉大人晶府,你說(shuō)我怎么就攤上這事∽昵鳎” “怎么了川陆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)蛮位。 經(jīng)常有香客問(wèn)我较沪,道長(zhǎng),這世上最難降的妖魔是什么失仁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任尸曼,我火速辦了婚禮,結(jié)果婚禮上陶因,老公的妹妹穿的比我還像新娘骡苞。我一直安慰自己,他們只是感情好楷扬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布解幽。 她就那樣靜靜地躺著,像睡著了一般烘苹。 火紅的嫁衣襯著肌膚如雪躲株。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,785評(píng)論 1 290
  • 那天镣衡,我揣著相機(jī)與錄音霜定,去河邊找鬼。 笑死廊鸥,一個(gè)胖子當(dāng)著我的面吹牛望浩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惰说,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼磨德,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了吆视?” 一聲冷哼從身側(cè)響起典挑,我...
    開(kāi)封第一講書(shū)人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎啦吧,沒(méi)想到半個(gè)月后您觉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡授滓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年琳水,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肆糕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡炫刷,死狀恐怖擎宝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浑玛,我是刑警寧澤绍申,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站顾彰,受9級(jí)特大地震影響极阅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涨享,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一筋搏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧厕隧,春花似錦奔脐、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至建丧,卻和暖如春排龄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翎朱。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工橄维, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拴曲。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓争舞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親澈灼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子兑障,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容