我在这里有点困惑,我使用队列,我到了一个我有点迷失的地步。
我有一个名为getPeople
who has to fetch 来自服务器的用户图片的方法。为了不阻止我使用的应用程序:
-(IBAction)seeMorePeople{
dispatch_queue_t getPeopleQueue = dispatch_queue_create("Pinta Ocupantes", NULL);
dispatch_async(getPeopleQueue, ^{
[self getPeople];
});
dispatch_release(getPeopleQueue);
}
每次用户点击按钮时都会执行前面的代码。诸如“给我这张专辑中的照片”之类的内容,然后再次点击“现在我想要其他专辑中的人们的照片”,不同的照片和不同数量的照片。如果用户非常快地点击按钮,当第二个队列已经开始时,第一个队列不会完成获取数据。我将数据存储在getPeople
NSMutableArray 中,因此当 2 个队列同时执行时,它们都在同一个数组上写入,并且应用程序由于超出范围异常而崩溃。通过数据的方式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 没有这个选项......任何其他方式来完成这个,希望没有专业重新编码,无论如何现在我没有想法,所以任何线索都会有所帮助。