gpt4 book ai didi

ios - 在 iOS 中下载图像时更新 UI(标签)

转载 作者:行者123 更新时间:2023-11-29 02:54:41 24 4
gpt4 key购买 nike

这是下载图片的功能,在这个功能中我必须更新 UI,显示总图片和计数器值(下载的图片)的 UILabels。

这就是我调用线程的原因。

-(void) DownloadImages
{
NSLog(@"Images count to download %lu",(unsigned long)[productID count]);
if ([productID count] > 0)
{
// Document Directory
NSString *myDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
for (i = 0; i < [productID count]; i++)
{
[NSThread detachNewThreadSelector: @selector(UpdateLabels) toTarget:self withObject:nil];
// [self UpdateLabels]; this does not work….
NSLog(@"image no %d", i);
//[self Status];
NSString *imageURL = [NSString stringWithFormat:@"http://serverPath/%@/OnlineSale/images/products/%@img.jpg",clientSite,[productID objectAtIndex:i]];
UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]]];
// Reference path
NSString *imagePath = [NSString stringWithFormat:@"%@/%@-1-lrg.jpg",myDirectory,[productID objectAtIndex:i]];
NSData *imageData = [NSData dataWithData:UIImageJPEGRepresentation(image, 1.0f)];
[imageData writeToFile:imagePath atomically:YES];
}
NSLog(@"Downloading images completed...");
}
}

问题:- 这里对于每张新图像我都必须调用每次新的 NSThread,可能有成千上万的图像,而且会有数千个线程看起来很糟糕。

  • 在模拟器中我已经针对 3000 图像对其进行了测试,但是在我的 iPad 中进行测试时出现错误,,,应用程序因内存压力而退出和终止

我猜错误是由于这种每次都调用新线程的方法造成的。

我在这里做错了什么??????????

我搜索过有两个不同的选项,但我不知道哪个是正确的选项,

选项是:

- [self performSelectorInBackground:@selector(UpdateLabels) withObject:nil];

- [NSThread detachNewThreadSelector: @selector(UpdateLabels) toTarget:self withObject:nil];

我也想知道如果我使用

  [NSThread cancelPreviousPerformRequestsWithTarget:self];

就在选择器调用之后,这种方法是否正确..???

最佳答案

我的建议是使用 NSOperationQueue 。然后您可以将 maxConcurrentOperationCount 属性设置为您喜欢的任何值。另外在你的情况下是最好的方法。研究一下您的 maxConcurrentOperationCount 是多少,以及您的 iPhone 可以毫无问题地运行多少个并发线程。NSOperationQueue 会为你运行新线程管理这个限制。

它应该看起来像这样:

NSOperationQueue *myQueue = [[NSOperationQueue alloc] init];
[myQueue setMaxConcurrentOperationCount:500];
for (i = 0; i < [productID count]; i++) {
[myQueue addOperationWithBlock:^{

// you image download here
}];
}

但首先要检查 apple 引用资料。

关于ios - 在 iOS 中下载图像时更新 UI(标签),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24062950/

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