【发布时间】:2014-03-19 15:06:00
【问题描述】:
问题
我有一个带有单个 UICollectionView 的应用程序,当我第一次滚动它时它会卡顿。我已将来源缩小到正在创建新单元 (2) 的事实(使用 initWithFrame:),因为周围没有可重复使用的单元。在初始滚动之后,重用队列不为空,并且可以重用单元格并且没有卡顿。
黑客攻击
所以我已经能够借助 iOS runtime headers 中的私有方法解决该问题:
- (void)_reuseCell:(id)arg1;
我的假设是,这是将单元格添加回重用队列的地方。使用这种未记录方法的 hack 如下所示:
int prefillCellCount = 10;
NSMutableArray *cells = [[NSMutableArray alloc] initWithCapacity:prefillCellCount];
for (int i=0; i<10prefillCellCount i++) {
UICollectionViewCell *cell = [self.gridView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
[cells addObject:cell];
}
for (UICollectionViewCell *cell in cells) {
[self.gridView _reuseCell:cell];
}
破解有效!滚动时不会卡顿。
问题
我认为我无法通过这个 hack 获得 App Store 的审核。有没有办法在不使用未记录的方法的情况下做到这一点?如果没有,我唯一的办法就是混淆黑客吗?
【问题讨论】:
标签: ios objective-c performance uicollectionview