UITabelView通常會顯示大量數據,若是有多少條數據就新建多少個cell,那麼對於內存來講是種極大的負擔,這樣天然是不合理的,因此纔會有重用機制spa
好比一個家庭辦酒席,一共有13桌,每桌20個菜,那麼準備150個左右的盤子就夠盛菜了,若是盤子不夠用了就把以前已經吃光菜的盤子收走洗洗乾淨就能重複使用了,這大體上就是重用機制的展現了code
下圖顯示的cell一共有6個blog
當把顯示金毛的這個cell滾出屏幕外了,這個cell就會被自動放進重用池中。當哈士奇下面一個的cell出現的時候,就會自動去重用池中找一個cell使用,這樣就避免了不停去建立cell致使內存崩潰的問題內存
下面是代碼舉例:it
//設置每行顯示什麼內容,也就是指定每一行的cell - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //建立一個重用標識符 static NSString *reuseIdentifier = @"reuse"; //表視圖經過重用標識符去重用池中查找是否有可以被重用的cell UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; if (cell == nil) { //建立一個cell /** cell樣式有四種 default、subititle、value一、value2 */ cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier] autorelease]; NSLog(@"建立了一個新的cell"); cell.selectionStyle = UITableViewCellSelectionStyleNone; } //指定cell內部空間的顯示內容 //重用池中取出的cell,並無釋放,因此會保留原有的內容,若是想要顯示本身的信息,須要對cell內部的控件進行從新賦值 // cell.textLabel.text = @"你是朱珍潔嗎"; // cell.detailTextLabel.text = @"你纔是豬"; cell.textLabel.text = _dataArray[indexPath.section][indexPath.row]; cell.imageView.image = [UIImage imageNamed:@"mao.jpg"]; return cell; }