Objective-C - 运行代码而不冻结应用程序

时间:2014-04-05 02:13:33

标签: objective-c downloading

我正在开发一个从互联网上下载一些数据的项目,但每当我打开包含下载代码的视图时,应用程序会冻结/暂停,直到下载完毕。

哪里(在哪种方法下)是必须编码的最佳位置,以便应用程序在下载时不会暂时冻结/暂停?

这就是我现在正在使用的:

UERootArray = [[NSArray alloc] initWithContentsOfURL:[NSURL URLWithString:@"url to file"]];

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可能正在同步下载。唐'吨。始终异步下载;这意味着下载发生在后台,主线程之外,并且不会冻结您的界面。

这里重写了您的代码(仅限iOS 7),可以异步执行此操作:

NSURL* url = [NSURL URLWithString:@"url to file"];
NSURLSession* session = [NSURLSession sharedSession];
NSURLSessionDownloadTask* task = [session downloadTaskWithURL:url completionHandler:^(NSURL *loc, NSURLResponse *response, NSError *error) {
    dispatch_async(dispatch_get_main_queue(), ^{
        self.myarray = [[NSArray alloc] initWithContentsOfURL:loc];
    });
}];
[task resume];