【问题标题】:NSURLConnection and NSTIMER issueNSURLConnection 和 NSTIMER 问题
【发布时间】:2011-08-10 23:22:24
【问题描述】:

我目前正在尝试在发出异步请求时设置 20 秒的时间。

遇到的问题是 NSURLconnection 在主线程上运行,因此,如果我运行 NSTIMER 来计算经过的秒数,它永远不会触发选择器,因为 NSURLconnection 阻塞了主线程。我可能可以在不同的线程上运行 NSURLconnection,因为它是线程安全的,但是我有一些奇怪的问题,比如我的代表没有被调用等等。任何帮助都非常感谢。

下面是我的片段:

    NSURL *requestURL = [NSURL URLWithString:SERVER];
    NSMutableURLRequest *req = [[[NSMutableURLRequest alloc] initWithURL:requestURL] autorelease];
    theConnection = [[NSURLConnection alloc]initWithRequest:req delegate:self];


if (!timeoutTimer) {
    NSLog(@"Create timer");
    timeoutTimer = [NSTimer scheduledTimerWithTimeInterval:TIMEOUT target:self selector:@selector(cancelURLConnection) userInfo:nil repeats:YES];

}

【问题讨论】:

    标签: iphone objective-c nsurlconnection nstimer nsthread


    【解决方案1】:

    NSURLConnection 的异步方法不会阻塞主线程。如果您的计时器没有触发,则有其他原因。您在后台线程上使用它的问题是因为后台线程默认情况下没有运行循环。

    【讨论】:

    • 谢谢。你其实是对的。异步请求不应阻塞主线程。嗯,我基本上是在创建一个连接,然后创建一个计时器。
    • 您是否考虑过使用NSMutableURLRequestsetTimeoutInterval: 方法而不是创建自己的计时器?
    • 我尝试删除它并对其进行硬编码,选择器永远不会被调用。
    • 这里好像有解决办法:stackoverflow.com/questions/1466389/…
    • 发现了这个问题,愚蠢的我在底部有一个挥之不去的无效方法:)
    【解决方案2】:

    This 是一个很好的教程,介绍了如何设置一个简单的 NSOperation 以在单独的线程上运行一个方法。我会根据您提到的内容开始。希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-07
      • 2011-03-21
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多