1熟妓、UITableView的簡單認識
(1)重用機制
UITableView最核心的思想就是UITableViewCell的重用機制。簡單的理解就是:UITableView只會創(chuàng)建一屏幕(或一屏幕多一點)的UITableViewCell孙援,其他都是從中取出來重用的。每當Cell滑出屏幕時,就會放入到一個集合(或數(shù)組)中(這里就相當于一個重用池),當要顯示某一位置的Cell時疤估,會先去集合(或數(shù)組)中取,如果有霎冯,就直接拿來顯示铃拇;如果沒有,才會創(chuàng)建沈撞。這樣做的好處可想而知慷荔,極大的減少了內(nèi)存的開銷。
(2)兩個重要的回調(diào)方法
UITableView最主要的兩個回調(diào)方法是
tableView:cellForRowAtIndexPath:
tableView:heightForRowAtIndexPath:
理想上我們是會認為UITableView會先調(diào)用前者缠俺,再調(diào)用后者显晶,因為這和我們創(chuàng)建控件的思路是一樣的,先創(chuàng)建它壹士,再設(shè)置它的布局磷雇。但實際上卻并非如此,我們都知道墓卦,UITableView是繼承自UIScrollView的倦春,需要先確定它的contentSize及每個Cell的位置户敬,然后才會把重用的Cell放置到對應(yīng)的位置落剪。所以事實上,UITableView的回調(diào)順序是先多次調(diào)用tableView:heightForRowAtIndexPath:以確定contentSize及Cell的位置尿庐,然后才會調(diào)用tableView:cellForRowAtIndexPath:忠怖,從而來顯示在當前屏幕的Cell。
舉個例子來說:
如果現(xiàn)在要顯示100個Cell抄瑟,當前屏幕顯示5個凡泣。那么刷新(reload)UITableView時,UITableView會先調(diào)用100次tableView:heightForRowAtIndexPath:方法,然后調(diào)用5次tableView:cellForRowAtIndexPath:方法鞋拟;滾動屏幕時骂维,每當Cell滾入屏幕,都會調(diào)用一次tableView:heightForRowAtIndexPath:贺纲、tableView:cellForRowAtIndexPath:方法航闺。
注意的細節(jié)是:如果 row 的高度都一定,那就刪除代理中的這個 tableView:heightForRowAtIndexPath: 方法猴誊,設(shè)置 Table View 的 rowHeight 屬性潦刃,相似的 numberOfRowsInSection: 系列的方法,蘋果的文檔里介紹這樣也可以減少了調(diào)用時間懈叹。