title: UICollectionView relodItemsAtIndexPaths reloads all items the collection view
body: <p>Please consider this simple code:</p>
  
  <pre><code>@interface ViewController ()&lt;UICollectionViewDelegate, UICollectionViewDataSource&gt;
  
  @property (nonatomic, strong) IBOutlet UICollectionView* collectionView;
  
  @end
  
  @implementation ViewController
  
  - (void)viewDidLoad {
       [super viewDidLoad];
  
       self.view.backgroundColor = [UIColor redColor];
  
       [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Hello"];
  
       dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(20 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  
           [self.collectionView reloadItemsAtIndexPaths:@[ [NSIndexPath indexPathForItem:0 inSection:0]]];
  });
  }
  
  - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
  {
      return 20;
  }
  
  - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
  {
      NSLog(@"RELOADING %ld", indexPath.row);
  
      NSString* identifier = @"Hello";
  
      UICollectionViewCell* cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
  
      NSArray* colors = @[[UIColor redColor], [UIColor blueColor]];
  
      cell.backgroundColor = colors[indexPath.row % colors.count];
  
      return cell;
  }
  
  @end
  </code></pre>
  
  <p>So there is a very basic <code>UICollectionView</code> here which is created in a storyboard. There's nothing especial about it. So what I'm doing is trying to reload just one item. And when I call <code>reloadItemsAtIndexPaths</code> it reloads all the items first and immediately reloads the one that I actually want to be reloaded. It is obviously wrong. I need to avoid doing all this extra work. Why does it even behave like that? Is it an iOS bug? Can anything be done to make it work correctly?</p>