面試中常常會問tableview的效能優化。
tableview只會載入能看到的cell,每當有乙個cell進入視野範圍內,就會呼叫。
存在著記憶體隱患,如果使用者拖動的很快,所以記憶體會飆公升的很快,因此要針對cell的返回方法上進行效能優化。
優化方案:系統呼叫這個方法的時候就是為了得到cell,一般的方法就是每次都alloc乙個cell,可以設計乙個快取池,當被建立過的cell逃出視野後,將這個cell丟入快取池,當發現有新的cell要建立的時候,先去快取池有沒有資料,有資料就拿過來然後改資料,否則就alloc乙個cell。
乙個細節:判斷cell的型別是否和當前相符,每次建立cell的時候都給cell繫結乙個標識,標識一樣才能拿過來用。
效能優化的步驟:
1.通過標識去快取池中找可迴圈利用的cell。
2.如果快取池中找不到可迴圈利用的cell,建立乙個新的cell,給cell貼乙個標籤。
3.給cell設定新的資料。
這個快取池是系統自動維護的,位於tableview內部,扔到快取池的操作是系統自動做的,只需要去快取池拿就可以。
從快取池中拿使用的是物件方法dequeue。
具體做法為:注意為了保證identifier的一致性,因此最好用變數儲存,為了防止變數連續建立,應該用static特性。
不用巨集的原因:id僅用於cell的建立函式中,這樣可以保證別的地方無法訪問,而巨集主要用於公共呼叫。
- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath
//設定資料
hero *hero = self.heros[indexpath.row];
cell.textlabel.text = hero.name;
cell.detailtextlabel.text = hero.intro;
cell.imageview.image = [uiimage imagenamed:hero.icon];
cell.accessorytype = uitableviewcellaccessorydisclosureindicator;
return cell;
}
用staitc修飾區域性變數可以保證變數只分配一次儲存空間,優化效能。
tip:tableview還有關於網路的效能優化,在以後學到以後再進行介紹。
tip:雖然離開螢幕的cell會自動銷毀,也應該慎用alloc,記憶體頻繁的建立和銷毀是很消耗效能的。
Spark資料本地性
1 檔案系統本地性 第一次執行時資料不在記憶體中,需要從hdfs上取,任務最好執行在資料所在的節點上 2 記憶體本地性 第二次執行,資料已經在記憶體中,所有任務最好執行在該資料所在記憶體的節點上 3 lru置換 如果資料只快取在記憶體中而並沒有快取到磁碟上,此時資料被置換出記憶體,則從hdfs上讀取...
Spark資料本地性
1 檔案系統本地性 第一次執行時資料不在記憶體中,需要從hdfs上取,任務最好執行在資料所在的節點上 2 記憶體本地性 第二次執行,資料已經在記憶體中,所有任務最好執行在該資料所在記憶體的節點上 3 lru置換 如果資料只快取在記憶體中而並沒有快取到磁碟上,此時資料被置換出記憶體,則從hdfs上讀取...
Spark效能優化之資料本地性調優
一 效能優化之資料本地性 1 資料本地性對分布式系統的效能而言是一件最為重要的情況之一,程式執行本身飲食 和資料兩部分,單機版本一般情況下很少考慮資料本地性的問題 因為資料在本地 但是對於單機版本的程式,由於資料本性有process local和node local之分,所以,盡量讓資料處於proc...