標籤:
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。
iOS學習心得——UITableViewCell的複用