iOS學習心得——UITableViewCell的復用

UITableView是在iOS開發中最常用的控件之一。我的第一篇學習心得獻給它了偷笑
UITableView是由一行一行的UITableViewCell構成的。
首先想這樣一個問題:現在用UITableView去做一個聯系人列表,如果我有10個100個聯系人,那我可以建10個100 ? ?個UITableViewCell,但是如果有一千一萬個呢,創建這么多Cell是不是會很影響手機的性能并且造成不好的用戶體驗呢?
因此,蘋果官方給出的解決方案是采用復用機制。
什么是復用機制?簡單點回答:如果有我就用,沒有我就創建。就比如吃飯需要用筷子,如果現在我家里有筷子當然我就用家里的筷子,如果家里沒有筷子我就去買筷子。買了筷子當然不會用一次,買了之后下次就是用買的筷子。當然這個例子不是特別恰當,領會精神為主。說不用筷子用勺子或者用一次性筷子的我不想看見你們。
來看看UITableViewCell創建的標準代碼:
static NSString *CellTableIdentifier = @"only";
? ? UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellTableIdentifier];
? ? if (cell == nil) {
? ? cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault?reuseIdentifier:CellTableIdentifier] autorelease];
}
我們這樣來理解:
如果有100行cell,根據cell高度和屏幕高度,我們每次只能顯示10行cell,我們在滑動屏幕時,我們已經創建的cell會被劃沒看不見,但是它們并沒有消失,而是相當于進入一個復用的隊列。然后當需要新建cell的時候,先到這個復用隊列里看看,如果有的話,我們就去復用隊列里取出這個cell使用,如果沒有的話我們才去真正的創建一個,這樣就避免了多次重復的創建UITableViewCell,對內存空間的使用起到了很好的控制作用。
static NSString *CellTableIdentifier = @"only";
這行代碼定義了一個靜態的字符串,用來當做cell的標識,static?關鍵字保證了唯一性
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellTableIdentifier];
接下來就該創建cell了。根據我們的邏輯,如果復用隊列中有可用的cell的話,我們是優先使用的,因此,我們首先要去復用隊列中尋找是否有我們需要的可用的cell,所以當前的tableView調用dequeueReusableCellWithIdentifier方法,參數就是我們定義的標識。如果復用隊列中有可用的cell,那么返回值就是這個可用的cell,如果沒有的話返回的是個nil。
第一次我們什么都沒有, 所以必然返回的是nil,因而進入到if的判斷條件中,在這里,才是我們真正的的第一次去創建cell。
cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault?reuseIdentifier:CellTableIdentifier] autorelease];
可以看到,我們在內存中為cell開辟了新的空間,生成新的cell,同時為cell附上它獨有的標識符,在它進入到復用隊列里以后,我們通過標識符來尋找我們所需要的cell。

轉載于:https://www.cnblogs.com/yangjun323/p/5140067.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373777.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373777.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373777.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java EE 7的高峰–使用EclipseLink的多租戶示例

水族館是有關所有相關規范和參考實現中有關Java EE進度的靈感和最新信息的重要來源。 他們從Oracle的Shaun Smith( 博客 / twitter )獲得了關于EclipseLink作為開源項目的地位和未來的演講。 他介紹了將在EclipseLink 2.4中提供的所有新功能,…

vscode中如何拉取git代碼_使用VSCode如何從github拉取項目的實現

使用VSCode如何從github拉取項目的實現最近使用vscode進行前端編程,遇到一些問題網上說明的不是很明顯,故記錄一下1.開vscode使用CTRL或者點擊查看到集成終端打開控制終端到此這篇關于使用VSCode如何從github拉取項目的實現的文章就介紹到這了,更多相關V…

matlab求導

在matlab中求導要進行符號運算。 >>syms x; >>y x^cos(x); >>ydot diff(y, x, 1);%對x求一階導數 ydot x^(cos(x) - 1)*cos(x) - x^cos(x)*log(x)*sin(x) >> y2dot diff(y, x, 2)%求二階導數,求n階導數同理。 y2dot cos(x)*(x…

帶有Java和Axis2的JSON Web服務

我最近遇到一位客戶,要求我使用Java Web服務重建其舊產品。 他們希望它模塊化并且易于使用。 我想到的第一件事是使用寧靜的方法。 但是讓我煩惱的是,Java寧靜的方法是使用XML !,我更喜歡一種更簡單的通信方式,易于理解和解析的數…

Kosaraju算法 有向圖的強連通分量

有向圖的強連通分量即,在有向圖G中,如果兩個頂點間至少存在一條路徑,稱兩個頂點強連通(strongly connected)。如果有向圖G的每兩個頂點都強連通,稱G是一個強連通圖。非強連通圖有向圖的極大強連通子圖,稱為強連通分量(…

監管大屏系統_工廠大屏可視化管控系統,智慧工廠平臺是什么,工廠管理大屏軟件 - 帆軟...

智慧工廠大屏可視化管控系統,不但注重顯示數據顯示信息能力,還要兼具監管的作用,配合時代新興的大屏技術,早已成為精益生產工廠的必備產品。本文權威介紹智慧工廠大屏可視化管控系統是什么,以及3款主流軟件&#xff0c…

圖像二維離散傅里葉變換、幅度譜、相位譜

clear, clc I imread(...);F fftshift(fft2(I)); % 對圖像進行二維 DFT(fft2),并移至中心位置 magn log(abs(F)); % 加 log 是便于顯示,縮小值域 phase log(angle(F)*180/pi); % 轉換為度數…

詳解CSS選擇器、優先級與匹配原理

選擇器種類 嚴格來講,選擇器的種類可以分為三種:標簽名選擇器、類選擇器和ID選擇器。而所謂的后代選擇器和群組選擇器只不過是對前三種選擇器的擴展應用。而在標簽內寫入style""的方式,應該是CSS的一種引入方式,而不是選…

關于299$的企業開發者賬號的申請流程

299$的企業開發者賬號 Apple Developer Enterprise Program?一年1988人民幣 - 企業 (Apple Developer Enterprise Program)- 公司應在鄧白氏注冊并擁有有效的 DUNS 號碼。-此計劃使開發者能夠開發針對 Apple 設備的應用程式,并對其員工進行發布&#xf…

keras 多層lstm_tensorflow-如何在keras中堆疊多個lstm?

DanielAdiwardana的答案的詳細說明。我們需要為除最后一層之外的所有LSTM層添加return_sequences True。將此標志設置為True可讓Keras知道LSTM輸出應包含所有歷史生成的輸出以及時間戳(3D)。 因此,下一個LSTM層可以進一步處理數據。如果此標志為假,則LS…

Java堆空間– JRockit和IBM VM

本文將為您提供JRockit Java堆空間與HotSpot VM的概述。 它還將為您提供有關JRockit和HotSpot的Oracle未來計劃的一些背景知識。 Oracle JRockit VM Java堆:2個不同的內存空間 -Java堆(YoungGen和OldGen) -本機內存空間(類池&am…

如何搭建lamp(CentOS7+Apache+MySQL+PHP)環境 [轉]

在網上搜資料,自己在本地虛擬機上嘗試搭建,弄了整整一天一夜,終于弄好了.網上的資料,雖然很多,但大多都是重復的,拿去試了之后,又很多都不能得到正確的結果.最終找到了適合我的linux環境的搭建方式;在這里貼出來:Install Apache, PHP And MySQL On CentOS 7 (LAMP)度娘真不給力…

為什么要用!DOCTYPE聲明

實例&#xff1a; 我們經常會看到類似這樣的代碼&#xff1a; <!DOCTYPE html> <html> <head> <title>文檔的標題</title> </head> <body> 文檔的內容...... </body> </html>注解&#xff1a;可以看到最上面有一行關于“…

java 線程的開始、暫停、繼續

Android項目中的一個需求&#xff1a;通過線程讀取文件內容&#xff0c;并且可以控制線程的開始、暫停、繼續&#xff0c;來控制讀文件。在此記錄下。 直接在主線程中&#xff0c;通過wait、notify、notifyAll去控制讀文件的線程&#xff08;子線程&#xff09;&#xff0c;報錯…

為什么要在Java中使用Unchecked異常而不是Checked異常

關于檢查與未檢查的異常的爭論可以追溯到過去。 有人說這是Java包含的最佳功能之一。 其他人則說這是他們最大的錯誤之一[ 1 ]。 辯論似乎結束了。 在這篇文章中&#xff0c;我將嘗試包含指向該主題的文章和書籍的鏈接。 我不是專家&#xff0c;但是我會盡力向您解釋為什么我得…

batchplot插件用法_Batchplot批量打印怎么用?Batchplot批量打印教程

很多從事CAD設計工作的用戶都碰到過這種情況&#xff1a;在一個單DWG格式的圖紙文件中包含有大量圖紙&#xff0c;如果一張一張選取打印不但費時費力&#xff0c;而且容易遺漏某張圖紙&#xff0c;這時候就需要用到Batchplot插件&#xff0c;這是專門針對單DWG多圖紙的批量打印…

選擇排序和冒泡排序以及折半查找

1.選擇排序 2.冒泡排序 3.折半查找 方式一&#xff1a;開發使用的方法 方式二&#xff1a;普通的折半 轉載于:https://www.cnblogs.com/juncaoit/p/5935068.html

JSP中Request屬性范圍

JSP屬性范圍&#xff0c;通過以下幾個測試代碼來學習request屬性的范圍 測試一(JSP動態指令方式傳參)&#xff1a; 測試內容&#xff1a; <jsp:param .../>添加參數,通過<jsp:forward page"...">來實現服務器端跳轉,以此來測試request屬性的范圍&#…

Spring MVC – Flash屬性

最新的Spring Framework版本&#xff08;3.1&#xff09;帶來了有趣的功能&#xff0c;稱為Flash屬性。 這是對我很久以前在我的一篇文章中提到的問題的補救措施&#xff1a; Spring MVC –會話屬性處理。 這個問題可以用幾句話來形容&#xff1a;如果我們想通過兩個控制器之間…

000 快速排序算法

一&#xff1a;概述 快速排序是東尼.霍爾所發展的一種快速排序算法。 對于n個項目的排序&#xff0c;平均O&#xff08;n*logn&#xff09;次比較&#xff0c;在比較糟糕的情況下是O&#xff08;n2&#xff09;次比較。 采用分治策略把一個串行分為兩個子串行。 二&#xff1a;…