У меня есть SSCollectionView, который смоделирован после NSCollectionView и UITableView.Он вызывает функцию для загрузки каждого элемента по indexPath.
Я хочу асинхронно загружать изображения в каждый из этих путей.
- (SSCollectionViewItem *)collectionView:(SSCollectionView *)aCollectionView itemForIndexPath:(NSIndexPath *)indexPath {
....
[self startLoadingItem:item indexPath:indexPath];
return item;
}
-(void)startLoadingItem:(SSCollectionViewItem *)collectionViewItem indexPath:(NSIndexPath *)indexPath
{
[SEThreadInvocation detachNewThreadSelector:@selector(loadItem:indexPath:) toTarget:self withObjects:collectionViewItem,indexPath, nil];
}
SEThreadInvocation - это просто подкласс NSThread, так что яможет отправить более одного объекта селектору.
-(void)loadItem:(SSCollectionViewItem *)collectionViewItem indexPath:(NSIndexPath *)indexPath {
...
collectionViewItem.imageView.image = imageToDisplay;
}
В действительности происходит то, что код изначально работает, но каждый раз, когда коллекция перезагружается (часто), он случайным образом размещает изображения во всем виде коллекции.
Я полагаю, что это потому, что мой SSCollectionViewItem каждый раз указывает на другое место в памяти, а мой элемент не является потокобезопасным, поэтому он просто печатает мои изображения повсюду, когда они изменяются в памяти.
Кроме того, я подумал, что это может быть замена изображений в памяти, поэтому я заменил его числами, и цифры перезагружаются по всему представлению коллекции при перезагрузке.
Как я могу сделать свои объекты безопасными для потока в этомконтекст?