UICollectionView将数组存储在数组中以便快速加载

时间:2013-05-10 10:30:19

标签: ios objective-c xcode uicollectionview

我有一个问题,我不确定是否有可能,所以我想我会在这里寻求建议!

我有一个应用程序,它使用UICollectionView向用户显示按钮网格。我正在使用自举式渐变按钮,因此要绘制每个单元格(一个'网格'中可以有40个按钮),它使用一些系统资源,重绘可能需要一些时间(好到半秒!)。用户也可以将不同的集合加载到集合视图中。为了避免这个加载时间,是否可以将所有单元格保存在一个数组中,而不是在调用-cellForRowAtIndexPath时配置每个单元格,只需从数组中拉出单元格即可?

我不太确定这是否已成功。我的应用程序有一个加载屏幕,因此阵列可以在启动时填充。

谢谢, 保罗

1 个答案:

答案 0 :(得分:4)

您可以使用NSCache来保存绘制的单元格

1)@property(非原子,强)NSCache * myCache;

viewDidLoad中的

2)

self.myCache = [[NSCache alloc] init];

3)使用这两种方法,

-(id) cellForIndexPathRow:(NSNumber *) number{
    return [self.myCache objectForKey:number];
}

-(void) setCell:(id) cell forIndexPathRow:(NSNumber *) number{
    [self.myCache setObject:cell forKey:number];
}

4)绘制单元格时,

先打电话

id cell = [self cellForIndexPathRow:[NSNumber numberWithInt:indexPath.row]];
if(!cell){
 //then create draw the cell

 //store the drawn cell in cache     
 [self setCell:cell forIndexPathRow:[NSNumber numberWithInt:indexPath.row]];
}