Я тут немного запутался, я использую очереди и дошел до того, что немного запутался.
У меня есть метод с именем getPeople
, который должен получать изображения пользователей с сервера. Чтобы не блокировать приложение, я использовал это:
-(IBAction)seeMorePeople{
dispatch_queue_t getPeopleQueue = dispatch_queue_create("Pinta Ocupantes", NULL);
dispatch_async(getPeopleQueue, ^{
[self getPeople];
});
dispatch_release(getPeopleQueue);
}
Предыдущий код выполняется каждый раз, когда пользователь нажимает кнопку. Что-то вроде «Дайте мне фотографии из этого альбома», а затем еще одно нажатие «Теперь я хочу фотографии людей из другого альбома», разные фотографии и разное количество фотографий. Если пользователь нажимает кнопки довольно быстро, первая очередь не закончит получение данных, когда вторая уже запущена. В getPeople
я храню данные в NSMutableArray, поэтому, когда две очереди выполняются одновременно, обе записываются в один и тот же массив, и приложение аварийно завершает работу из-за исключения за пределами границ.
Способ, которым getPeople
просматривает данные, примерно такой:
-(void)getPeople:(NSDictionary *)peopleDictionary{
//I receive an NSDictionary and I go through it
NSArray *keys = [peopleDictionary allKeys];
int indexOfArray = 0;
for(NSString *key in keys){
//Complex operation that are not important
[peopleInArray insertObjetAtIndex:indexOfArray];//People in array is a global variable
indexOfArray++;
}
}
Чего я не могу понять, так это того, как выйти из этого, я думал остановить первую очередь, когда приходит вторая, но у GCD нет этой опции ... любой другой способ сделать это, надеюсь, без серьезной перекодировки, в любом случае сейчас у меня нет идей, поэтому любая подсказка поможет.