iphone - 如何在应用程序后台运行一个不会影响我的应用程序用户界面的线程
<p><p>我已经为IOS做了一个应用程序,我在其中使用sqlite数据库,数据库在应用程序中是本地的。
现在我已经给出了应用程序从互联网下载数据并将其放入本地数据库并显示在用户面前的功能。我在 <code>- (void)viewDidLoad</code> 上提供了这个功能,这样当应用程序下载数据时,它会停止工作,直到完成下载部分,因为这个用户需要等待与应用程序交互。</p>
<p>现在我想在应用程序后台运行一个线程,该线程将连接互联网并更新应用程序而不会干扰用户。
请帮帮我。</p>
<p>我的下载和保存图片的代码是这样的:</p>
<pre><code> -(void)Download_save_images:(NSString *)imagesURLPath :(NSString *)image_name
{
NSMutableString *theString = ;
// Get an image from the URL below
UIImage *image = [ initWithData:]];
NSLog(@"%f,%f",image.size.width,image.size.height);
NSString *docDir = ;
// If you go to the folder below, you will find those pictures
NSLog(@"%@",docDir);
;
;
NSLog(@"%@",theString);
NSLog(@"saving png");
NSString *pngFilePath = ;
NSData *data1 = ;
;
NSLog(@"saving image done");
;
// ;
}
</code></pre>
<p>当我调试应用程序时,我看到我的应用程序在下面一行花费了更多时间:</p>
<pre><code>UIImage *image = [ initWithData:]];
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>如果您觉得 <strong>GCD</strong> 困难,您也可以使用 <strong>NSOperationQueue</strong> 和 <strong>NSBlockOperation</strong>。</p>
<pre><code>NSBlockOperation *operation=[ init];
[operation addExecutionBlock:^{
//Your code goes here
}];
NSOperationQueue *queue=[ init];
;
</code></pre>
<p>在 <strong>GCD</strong> 中您可以使用</p>
<pre><code>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
});
});
</code></pre>
<p>根据您的需要使用任一 API。查看这个讨论 <a href="https://stackoverflow.com/questions/10373331/nsoperation-vs-grand-central-dispatch" rel="noreferrer noopener nofollow"><strong>NSOperationQueue</strong> vs <strong>GCD</strong></a> 的线程了解更多信息。</p></p>
<p style="font-size: 20px;">关于iphone - 如何在应用程序后台运行一个不会影响我的应用程序用户界面的线程,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/16207353/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/16207353/
</a>
</p>
页:
[1]