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。
相關文章
相關標籤/搜索