iOS-UITableView的優(yōu)化

關(guān)于UITableView的一些性能優(yōu)化


在實(shí)際iOS開發(fā)中庶艾,我們用的最多和最常見的一個(gè)UI空間就是列表(UITableView)袁余,在UI空間中設(shè)計(jì)到的知識(shí)點(diǎn)也是列表最多,比如列表的一系列協(xié)議方法落竹,包括必須實(shí)現(xiàn)的和可選實(shí)現(xiàn)的泌霍。那么在實(shí)際開發(fā)中货抄,為了給用戶一個(gè)更好的體驗(yàn)述召,那么久需要進(jìn)行性能的一下改善。

UITableView的介紹


UITableView是繼承于UIScrollview的蟹地,因此可以自動(dòng)響應(yīng)滾動(dòng)事件积暖,UITableView最常用的兩個(gè)協(xié)議是:UITableViewDataSource和UITableViewDelegate,對(duì)于這兩個(gè)協(xié)議里面的常用方法:

UITableViewDataSource的常用方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

@optional

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;              // Default is 1 if not implemented

- (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;    // fixed font style. use custom view (UILabel) if you want something different
- (nullable NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;

UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

在實(shí)際開發(fā)中怪与,我們需要注意的是創(chuàng)建TableView時(shí)夺刑,盡可能的用懶加載的創(chuàng)建方式,這樣的話對(duì)內(nèi)存占用會(huì)有明顯的減少分别,示例代碼:

- (UITableView *)tableView{
if (!_tableView) {
    _tableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];
    _tableView.delegate = self;
    _tableView.dataSource = self;
    _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    [_tableView registerNib:[UINib nibWithNibName:@"QLTableViewCell" bundle:nil] forCellReuseIdentifier:@"tableViewCell"];
    [_tableView registerNib:[UINib nibWithNibName:@"QLheaderView" bundle:nil] forHeaderFooterViewReuseIdentifier:@"tableHeaderView"];
    _tableView.backgroundColor = [UIColor clearColor];
}
    return _tableView;
}

當(dāng)然在注冊(cè)cell的時(shí)候遍愿,上面是直接給了一個(gè)Identifier,其實(shí)為了更好的優(yōu)化,建議大家這么寫:
static NSString *Identifier = @"QLTableViewCell";然后在注冊(cè)的時(shí)候可以直接調(diào)用耘斩。

數(shù)據(jù)源數(shù)組沼填,盡可能的也用懶加載,在數(shù)據(jù)請(qǐng)求回來后括授,進(jìn)行self.dataArray進(jìn)行保存坞笙。

如果你在開發(fā)的時(shí)候?qū)τ贑ell,用的是xib荚虚,那么你在這里也可以優(yōu)化薛夜,
1、盡可能的避免系統(tǒng)反復(fù)調(diào)用
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
2版述、在創(chuàng)建cell的時(shí)候梯澜,避免重復(fù)創(chuàng)建,可以利用復(fù)用:

pragma mark - 協(xié)議方法

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
QLTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"tableViewCell" forIndexPath:indexPath];
//去掉cell選中的背景顏色
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.model = self.dataArray[indexPath.row];
return cell;

}
3渴析、不使用1進(jìn)行設(shè)置行高晚伙,利用系統(tǒng)提供的屬性简十,進(jìn)行自動(dòng)緩存和計(jì)算行高,并進(jìn)行展示:

/*估算tableView的高度為200*/
self.tableView.estimatedRowHeight = 200;
/*自動(dòng)計(jì)算行高*/
self.tableView.rowHeight = UITableViewAutomaticDimension;

4撬腾、模型和視圖進(jìn)行分開螟蝙,在進(jìn)行VC的關(guān)聯(lián),實(shí)現(xiàn)MVC開發(fā)模式民傻。

在請(qǐng)求數(shù)據(jù)的時(shí)候胰默,異步請(qǐng)求,刷新視圖的數(shù)據(jù)的時(shí)候回到主線程刷新漓踢,實(shí)現(xiàn)高內(nèi)聚牵署,低耦合。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喧半,一起剝皮案震驚了整個(gè)濱河市奴迅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挺据,老刑警劉巖取具,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異扁耐,居然都是意外死亡暇检,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門婉称,熙熙樓的掌柜王于貴愁眉苦臉地迎上來块仆,“玉大人,你說我怎么就攤上這事王暗』诰荩” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵俗壹,是天一觀的道長(zhǎng)科汗。 經(jīng)常有香客問我,道長(zhǎng)策肝,這世上最難降的妖魔是什么肛捍? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮之众,結(jié)果婚禮上拙毫,老公的妹妹穿的比我還像新娘。我一直安慰自己棺禾,他們只是感情好缀蹄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般缺前。 火紅的嫁衣襯著肌膚如雪蛀醉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天衅码,我揣著相機(jī)與錄音拯刁,去河邊找鬼。 笑死逝段,一個(gè)胖子當(dāng)著我的面吹牛垛玻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奶躯,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼帚桩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了嘹黔?” 一聲冷哼從身側(cè)響起账嚎,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎儡蔓,沒想到半個(gè)月后郭蕉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浙值,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年恳不,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片开呐。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖规求,靈堂內(nèi)的尸體忽然破棺而出筐付,到底是詐尸還是另有隱情,我是刑警寧澤阻肿,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布瓦戚,位于F島的核電站,受9級(jí)特大地震影響丛塌,放射性物質(zhì)發(fā)生泄漏较解。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一赴邻、第九天 我趴在偏房一處隱蔽的房頂上張望印衔。 院中可真熱鬧,春花似錦姥敛、人聲如沸奸焙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)与帆。三九已至了赌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間玄糟,已是汗流浹背勿她。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阵翎,地道東北人嫂拴。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像贮喧,于是被迫代替她去往敵國(guó)和親筒狠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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

  • 概述在iOS開發(fā)中UITableView可以說是使用最廣泛的控件箱沦,我們平時(shí)使用的軟件中到處都可以看到它的影子辩恼,類似...
    liudhkk閱讀 9,059評(píng)論 3 38
  • TableView的優(yōu)化 一:什么是TableView的優(yōu)化以及為什么要優(yōu)化 1)CPU(中央處理器)和GPU(圖...
    學(xué)_iOS閱讀 1,103評(píng)論 0 6
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,150評(píng)論 30 470
  • 用到的組件 1、通過CocoaPods安裝 2谓形、第三方類庫(kù)安裝 3灶伊、第三方服務(wù) 友盟社會(huì)化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 14,621評(píng)論 1 180
  • 在學(xué)習(xí)稻盛和夫經(jīng)營(yíng)哲學(xué)中,讓我深深反思的問題: 什么樣的人是真正有實(shí)力的人寒跳? 擁有恪守職守的能力聘萨,同時(shí)人格高尚,值...
    靜尚形象設(shè)計(jì)閱讀 466評(píng)論 0 0