小编mac*_*nra的帖子

NSURLConnection超时

在我们的iPhone应用程序中,NSURLConnection请求暂时出现了间歇性问题.它似乎发生得更晚了.一旦进入此状态,它就会保持该状态.唯一的决议似乎是杀死应用程序并重新启动它.

观察:

  • 执行NSURLConnection的核心代码没有改变(最近添加的一些自定义用户代理代码除外).
  • 还没有找到一个可重现的案例,但是应用程序在后台暂停一段时间后似乎会发生超时,特别是如果在3G上运行(没有WiFi).
  • 服务器上的Apache在遇到这些超时时没有记录客户端的请求.
  • 一些迹象表明,其他应用程序,如邮件和Safari受到影响(即,遇到超时),虽然不一致.
  • 我所处的3G覆盖范围很大,不排除触发问题的暂时性问题(假设不太可能).
  • 所有请求都将转到我们自己的API服务器,并且是非常好的POST请求.
  • 由于timeoutInterval和POST请求的问题,我们使用自己的基于NSTimer的超时.我已经尝试过增加超时值 - 问题仍然存在.

其他杂项:

  • App最近转换为ARC.
  • 在iOS 5.1.1下运行应用程序.
  • App使用最新版本的UrbanAirship,TestFlight和Flurry SDK.
  • 还使用TouchXML的ARC分支来解析响应.

如下所示,代码在主线程上运行.我假设有一些东西在该线程上阻塞,但是我在暂停应用程序时看到的堆栈跟踪表明主线程没问题.我认为NSURLConnection正在使用自己的线程,必须阻止它.

#define relnil(v) (v = nil)

- (id) initWebRequestController
{
    self = [super init];
    if (self)
    {
        //setup a queue to execute all web requests on synchronously
        dispatch_queue_t aQueue = dispatch_queue_create("com.myapp.webqueue", NULL);
        [self setWebQueue:aQueue];
    }
    return self;
}

- (void) getStuffFromServer
{
    dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(aQueue, ^{
        dispatch_sync([self webQueue], ^{            
            error_block_t errorBlock = ^(MyAppAPIStatusCode code, NSError * error){
                dispatch_async(dispatch_get_main_queue(), ^{ …
Run Code Online (Sandbox Code Playgroud)

nsurlconnection ios

5
推荐指数
1
解决办法
2525
查看次数

标签 统计

ios ×1

nsurlconnection ×1