UITableView通過重用單元格來達到節省內存的目的:通過為每個單元格指定一個重用標識符(reuseIdentifier),即指定了單元格的種類,以及當單元格滾出屏幕時,允許恢復單元格以便重用.對於不同種類的單元格使用不同的ID,對於簡單的表格,一個標識符就夠了.
假如一個TableView中有10個單元格,但是屏幕上最多能顯示4個,那麼實際上iPhone只是為其分配了4個單元格的內存,沒有分配10個,當滾動單元格時,屏幕內顯示的單元格重復使用這4個內存。實際上分配的Cell個數為屏幕最大顯示數, 當有新的Cell進入屏幕時,會隨機調用已經滾出屏幕的Cell所占的內存,這就是Cell的重用。
對於多變的自定義cell,這種重用機制會導致內容出錯。為了解決這種出錯的,經過反復的google,終於找到一個適合的方法。就是把原來的
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:defineString];修改為:
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
這樣就能解決掉cell重用機制導致的問題了。