UITableView重用的理解
由于内存有限,我们就需要重用UITableViewCell对象
UITableView.png当用户滚动窗口,图中第一个UITableViewCell1对象移除窗口,UITableView对象会将移除窗口的UITableViewCell对象放入UITableViewCell对象池,等待重用.当UITableView对象要求数据源返回某个UITableViewCell对象时,数据源先查看对象池子,如果有没有使用的对象,就给这个对象配置数据,并且返回给UITableView(cell8后面没有了,就显示Cell1)
问题:
有时候会自定义Cell,所以UITableView可能拥有不同类型了的UITableViewCell,那么UITableView可能从对象池中得到错误类型的UITableViewCell对象
你要知道返回的对象拥有哪些属性和方法,就要确保UITableView获得指定类型的UITableViewCell对象
假设你UITableViewCell的子类叫做UITableChildCell
在cellForRowAtIndexPath那个方法中创建或重用UITableViewCell对象:
<pre> <code> UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableChildViewCell" forIndexPath:indexPath];</code></pre>
为了重用UITableViewCell对象,要将创建的过程交给系统管理,告诉表试图,如果对象池中没有UITableViewCell对象,应该初始化哪种类型的Cell对象.所以在ViewDidLoad中调用:
<pre><code> [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewChildCell"</code></pre>
刚开始对象池中没有东西,就会初始化UITableViewChildCell对象,等屏幕满了,就不会创建,直接在对象池里调用之前推出的未使用对象
方法中的ReuseIdentifier属性:
每个UITableViewCell对象都有一个NSString类型的reuseIdentifier属性,按照约定,我们将UITableViewCell或他的子类的类名,用reuseIdentifier命名.就像UITableViewChildCell
当数据源向UITableView对象获取可重用的UITableViewCell对象时,传入一个字符串,而UITableViewCell的reuseIdentifier属性要等于这个字符串,这样就保证了UITableView获得指定类型的UITableViewCell对象.