应用启动后完成NSURLRequest

时间:2014-04-18 21:26:43

标签: ios multithreading queue nsurlrequest

所以我有一个标签式iOS应用程序,应用程序中的两个视图控制器都有webViews。没有其他的。打开这些视图后,他们会调用我在viewDidLoad方法中编码的NSURLRequest(众所周知)。非常典型,基本,简单的代码。

我想要做但却无法弄清楚的是,如何在应用启动时调用和完成这些请求,而不是在第一次查看视图控制器时触发。加载只需要很长时间。

我对线程和块没有很多经验,所以任何建议都会有所帮助!我知道需要在主线程/队列上调用所有UI内容。我已尝试使用另一个线程(在视图控制器2中注释掉),因此对我已经拥有的内容的任何进一步解释也会很好。

VC 1

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSURL *url = [NSURL URLWithString:@"https://soundcloud.com/vanguardsf"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [_music loadRequest:request];
}

VC 2

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGRect screen = [[UIScreen mainScreen]applicationFrame];
    _webView = [[UIWebView alloc]initWithFrame:screen];
    _webView.delegate = self;
    [self.view addSubview:_webView];

    NSString *netGym = @"http://www.netgym.com/login.asp";
    NSURL *url = [NSURL URLWithString:netGym];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [_webView loadRequest:request];
    NSLog(@"%@", request );


//    if (!requestQueue) {
//        requestQueue = dispatch_queue_create("come.requestNetgym.load", NULL);
//    }

//    dispatch_queue_t requestQueue = dispatch_queue_create("come.requestNetgym.load", NULL);

//    dispatch_async(requestQueue, ^{
//        NSString *netGym = @"http://www.netgym.com/login.asp";
//        NSURL *url = [NSURL URLWithString:netGym];
//        NSURLRequest *request = [NSURLRequest requestWithURL:url];
//        [_webView loadRequest:request];
//        NSLog(@"%@", request );
//    });

}

1 个答案:

答案 0 :(得分:0)

您不必使用GDC发送asynchrounus NSURLRequests - 如果您没有故意同步使用它们,它们就是异步的。

您可以使用此方法启动请求: https://developer.apple.com/library/ios/documentation/uikit/reference/uiapplicationdelegate_protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:willFinishLaunchingWithOptions: 当您可以在启动完成后执行代码时,这是应用程序中的第一个位置。你会节省一些时间(我想的很少 - 这看起来像一个简单的应用程序)。

我认为更好的解决方案是缓存下载的网站数据。在这种情况下,您将在第一次输入应用程序时下载数据,第二次您将显示下载的内容。在后台您将检查网站是否已更改。如果是这样您更新内容。