UITableView中的cell的優化

来源:http://www.cnblogs.com/liyy2015/archive/2016/01/14/5131950.html
-Advertisement-
Play Games

1.cell的重用 所謂的cell的重用就是,視圖載入的時候只會創建當前視圖中的cell,或者比當前視圖多一點的cell,當視圖滾動的時候,滾出屏幕的cell會放進緩存中,滾進屏幕的cell會根據Identifier從緩存中獲取cell,如此的迴圈往複,這樣只會創建固定的cell對象,節省了記憶體。下...


 1.cell的重用

   所謂的cell的重用就是,視圖載入的時候只會創建當前視圖中的cell,或者比當前視圖多一點的cell, 當視圖滾動的時候,滾出屏幕的cell會放進緩存中,滾進屏幕的cell會根據Identifier從緩存中獲取cell,如此的迴圈往複,這樣只會創建固定的cell對象,節省了記憶體。

下麵是重用cell的代碼:

 //1. 定義重用的標識

   static  NSString *reuseId = @"tg";

    //2,從緩存中獲取重用cell

    CZTgCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];

    

    //3.判斷如果cell等於nil 就創建cell

    if (cell == nil) {

        cell = [[[NSBundle mainBundle]loadNibNamed:@"CZTgCell" owner:nil options:nil]lastObject];

    }

    return cell; 

  2.為什麼定義重用標識符的時候,定義為靜態的

    cell調用的次數相當多,會創建多次標識符對象,而靜態的變數只會創建一次開闢一塊記憶體,節省了記憶體空間。

  3.cell的init方法的註意點

   重寫init方法,添加子控制項時,在這個方法中,需要對控制項的一次性屬性進行設置,所謂的一次性屬性,指的是像文字的大小啊文字的顏色啊之類的固定值,因為這些屬性和數據沒有關係,提高了性能。

    註意:設置控制項的frame,直接在init方法中headView的frame沒有效果,所以要在layoutSubviews方法中設置各個子控制項的frame,這個方法必須重寫父類的方法。

 4.cell重用的時候,不光要覆蓋數據,也應該要覆蓋對應的狀態,否則重用的時候會把狀態和數據都會重用

  重用解決:在重寫模型的set方法,覆蓋數據和狀態。

5.cell的行高的問題

  cell創建之前多次計算行高,如果行高是固定的,那儘量少用下麵的代理方法,因為它會多次調用並計算行高,可以用tableView的rowHeight屬性

  -(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在移動端網頁開發中,總是因為不方便調試,導致各種問題不容易被髮現。但是現在有了Browsersync,一切都解決了。不熟悉的同學可以看看Browsersync的官方網站Browsersync中文網。五分鐘快速入門1.使用Browsersync前需要安裝node.js。詳細的安裝過程可參見window...
  • 利用CSS3在Angular中實現動畫。直接看例子: ngAnimate插件1 引入angular-animate插件,我們綁定了ng-if指令,在刪除和添加DOM節點的時候,angular會添加指定的class,方便我們完成動畫。.ng-enter.ng-enter-active.n...
  • 在網頁中,我們可以將JavaScript代碼放在html文件中任何位置,但一般放在head或body標簽裡面。一般來說,
  • 最近測試給了我一大堆BUG,一瞅發現全是IE11的。吐槽一下這個瀏覽器真的比較特立獨行。很多預設的樣式跟別的瀏覽器不同,而且最明顯的一點應該是padding左右內邊距往往比別的瀏覽器大了一倍。但是當需要修改的時候又頭疼了。如果改變原有的padding值,那麼在IE11生效了。別的瀏覽器又有問題了.....
  • CSS代碼重構的目的我們寫CSS代碼時,不僅僅只是完成頁面設計的效果,還應該讓CSS代碼易於管理,維護。我們對CSS代碼重構主要有兩個目的:1、提高代碼性能2、提高代碼的可維護性提高代碼性能提高CSS代碼性能主要有兩個點:1、提高頁面的載入性能提高頁面的載入性能,簡單說就是減小CSS文件的大小,提高...
  • 一、概述銀聯手機支付控制項(以下簡稱支付控制項),主要為合作商戶的手機客戶端或手機Web網站提供安全、便捷的支付服務。目前支付控制項支持Android和iOS兩個平臺,用戶通過在支付控制項中輸入銀行卡卡號、手機號、密碼(借記卡和預付卡)或者CVN2、有效期(信用卡)、驗證碼等要素完成支付。二、支付流程介紹通...
  • //改變圖片的亮度方法 0--原樣 >0---調亮 <0---調暗 private void changeLight(ImageView imageView, int brightness) { ColorMatrix cMatrix = new ColorMatrix();...
  • 一、什麼是Quartz2DQuartz 2D是⼀個二維繪圖引擎,同時支持iOS和Mac系統Quartz 2D能完成的工作:繪製圖形 : 線條\三角形\矩形\圓\弧等 繪製文字繪製\生成圖片(圖像)讀取\生成PDF 截圖\裁剪圖片 自定義UI控制項二、Quartz2D在iOS開發中的價值為了便於搭建美觀...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...