gpt4 book ai didi

objective-c - 图片下载的顺序不正确

转载 作者:行者123 更新时间:2023-12-03 17:22:52 24 4
gpt4 key购买 nike

 NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation;
for(int k=0; k<[imageArray count]; k++)
{
operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loadData:) object:[imageArray objectAtIndex:k]];
[queue addOperation:operation];
[operation release];
}

使用上面的代码,我调用了方法loadData来下载一些图像。

-(void)loadData:(NSString*)newImage
{
[CATransaction begin];
[CATransaction setDisableActions:YES];
NSData * imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:newImage]];
NSString* appSuppPath = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* foofile = [appSuppPath stringByAppendingPathComponent:@"/PSDB"];


NSString * str =[NSString stringWithFormat:@"%@/%d.jpeg",foofile,x];
x++;
[imageData writeToFile:str atomically:YES];
[CATransaction commit];
}

图像已下载并保存。问题是小尺寸图像下载得很快。例如,如果第 6 个图像是小尺寸图像,则它首先下载并保存为 1.jpeg。我怎样才能按订单制作。

最佳答案

来自 NSOperationQueue doc

操作队列根据其优先级和准备情况执行其排队的操作对象。如果所有排队的操作对象都具有相同的优先级,并且在放入队列时已准备好执行(即它们的 isReady 方法返回 YES),那么它们将按照提交到队列的顺序执行。对于最大并发操作数设置为1的队列来说,这相当于串行队列。但是,您永远不应该依赖操作对象的串行执行。操作准备情况的变化可能会改变最终的执行顺序。

如果setMaxConcurrentOperationCount没有帮助,请尝试在自定义NSInitationOperation中使用-isReady方法

关于objective-c - 图片下载的顺序不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16691038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com