как работают очереди отправки

Я тут немного запутался, я использую очереди и дошел до того, что немного запутался.

У меня есть метод с именем 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 нет этой опции ... любой другой способ сделать это, надеюсь, без серьезной перекодировки, в любом случае сейчас у меня нет идей, поэтому любая подсказка поможет.

5
задан Kekoa 11 April 2012 в 16:00
поделиться