- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; // 下面 _assetFetchResult 是提取的一个相册,这些都不重要 [_imageManager requestImageForAsset:_assetFetchResult targetSize:size contentMode:PHImageContentModeAspectFit options:nil resultHandler:^(UIImage *result, NSDictionary *info ){ _a++; NSLog (@"%i", _a ); // 这是定义的一个 int // 这个_a 的结果第一次为 1 ,第二次为 2 ,怎么会执行两次呢? }]; return cell; }
UIImageView *view = [[UIImageView alloc] initWithFrame:cell.contentView.frame]; view.image = result; view.contentMode = UIViewContentModeScaleAspectFit; [cell.contentView addSubview:view];
1 zwzmzd 2015-09-15 08:39:16 +08:00 via Android 设断点,看调用栈,几分钟的事 |
![]() | 2 EggmanQ 2015-09-15 11:48:28 +08:00 ![]() 没上下文没系统版本…… 这跟 UICollectionView ( UITableView ) 的 cell 重用机制有关,最直接打断点就能看到了。 我之前调制 UITableView 的时候也发现类似的问题( iOS 8 ), cell 在准备重用的时候(快要移动到可见区域), UITableView 会调用一次 cellForRowAtIndexPath ,然后 cell 出现的时候(移动到可见区域,但只有 1 像素), UITableView 又会再调用一次 cellForRowAtIndexPath 。 |
![]() | 3 strom001 OP |
![]() | 4 strom001 OP 终于找到原因了……和 cell 没关系,是别的地方影响了。 |