• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iphone - 如何在应用程序后台运行一个不会影响我的应用程序用户界面的线程

[复制链接]
菜鸟教程小白 发表于 2022-12-13 02:25:17 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我已经为IOS做了一个应用程序,我在其中使用sqlite数据库,数据库在应用程序中是本地的。 现在我已经给出了应用程序从互联网下载数据并将其放入本地数据库并显示在用户面前的功能。我在 - (void)viewDidLoad 上提供了这个功能,这样当应用程序下载数据时,它会停止工作,直到完成下载部分,因为这个用户需要等待与应用程序交互。

现在我想在应用程序后台运行一个线程,该线程将连接互联网并更新应用程序而不会干扰用户。 请帮帮我。

我的下载和保存图片的代码是这样的:

 -(void)Download_save_imagesNSString *)imagesURLPath NSString *)image_name   
   {                              

      NSMutableString *theString = [NSMutableString string];

    // Get an image from the URL below    
      UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:NSURL  URLWithString:imagesURLPath]]];        
      NSLog(@"%f,%f",image.size.width,image.size.height);        
     NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    // If you go to the folder below, you will find those pictures
     NSLog(@"%@",docDir);    
    [theString appendString"%@/"];
    [theString appendString:image_name];
    NSLog(@"%@",theString);
    NSLog(@"saving png");
    NSString *pngFilePath = [NSString stringWithFormat:theString,docDir];
    NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(image)];
    [data1 writeToFile:pngFilePath atomically:YES];  

    NSLog(@"saving image done");

    [image release];
   // [theString release];
}

当我调试应用程序时,我看到我的应用程序在下面一行花费了更多时间:

UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:NSURL  URLWithString:imagesURLPath]]];



Best Answer-推荐答案


如果您觉得 GCD 困难,您也可以使用 NSOperationQueueNSBlockOperation

NSBlockOperation *operation=[[NSBlockOperation alloc] init];

[operation addExecutionBlock:^{
    //Your code goes here

}];

NSOperationQueue *queue=[[NSOperationQueue alloc] init];
[queue addOperationperation];

GCD 中您可以使用

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
   //Your Code to download goes here

    dispatch_async(dispatch_get_main_queue(), ^{
       //your code to update UI if any goes here

    });
});

根据您的需要使用任一 API。查看这个讨论 NSOperationQueue vs GCD 的线程了解更多信息。

关于iphone - 如何在应用程序后台运行一个不会影响我的应用程序用户界面的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16207353/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap