UITableView 通过重用单元格来达到节省内存的目的:通过为每个单元格指定一个重用标识符(reuseldentifier),也就是指定单元格的种类,当单元格滚动出屏幕之后,允许恢复单元格以便重用。对于不同种类的单元格使用不同的ID。对于简单的一张表,一个标识符就够了。
假如一个UITableView上有10个单元格,但是屏幕上最多显示4个,那么实际上iphone只为它分配4个单元格的内存,并没有分配10个,当滚动单元格的时候,屏幕显示的单元格重复使用这4个内存。也就是说:实际上分配的Cell的个数就是屏幕上能显示的Cell的最大个数,当有新的Cell进入屏幕时,会随机调用已经已经滚出屏幕的cell所占用的内存,这就是Cell的重用;
对于多变的自定义Cell,这种重用机制会导致内容出错,为了解决这种错误,最合适的办法就是把原来的 UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier : defineString]; 修改为:UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];这样就能解决掉Cell的复用机制导致的问题了;