首页 文章

NSURLConnectionLoader线程中的奇怪崩溃

提问于
浏览
7

我们开始看到我们的应用启动时发生的崩溃 . 我无法重现它,它只发生在少数用户身上 .

例外情况是:异常类型:EXC_BAD_ACCESS代码:KERN_INVALID_ADDRESS位于0x3250974659

调用 -[NSBlockOperation main] 时,崩溃发生在名为com.apple.NSURLConnectionLoader的线程中

这是该线程的堆栈跟踪:

0    libobjc.A.dylib     objc_msgSend + 9
1    Foundation      -[NSBlockOperation main] + 200
2    Foundation  -[__NSOperationInternal start] + 840
3    Foundation  -[_NSCFURLProtocolBridgeWithTrampoline processEventQ] + 344
4    Foundation  -[_NSCFURLProtocolBridgeWithTrampoline pushEvent:from:] + 298
5    Foundation  -[_NSCFURLProtocolBridge stop] + 88
6    Foundation  _bridger + 64
7    CFNetwork   __block_global_7 + 24
8    CFNetwork   __block_global_8 + 12
9    CFNetwork   ___performAsync_block_invoke_068 + 18
10   CoreFoundation  CFArrayApplyFunction + 176
11   CFNetwork   RunloopBlockContext::perform() + 74
12   CFNetwork   MultiplexerSource::perform() + 188
13   CoreFoundation  __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14
14   CoreFoundation  __CFRunLoopDoSources0 + 212
15   CoreFoundation  __CFRunLoopRun + 646
16   CoreFoundation  CFRunLoopRunSpecific + 356
17   CoreFoundation  CFRunLoopRunInMode + 104
18   Foundation  +[NSURLConnection(Loader) _resourceLoadLoop:] + 308
19   Foundation  __NSThread__main__ + 972
20   libsystem_c.dylib   _pthread_start + 308

非常感谢任何帮助,以了解可能导致这种崩溃的原因 .

2 回答

  • 0

    我的猜测(因为没有代码所有答案都会猜测) - 你是否在块执行之前释放你在块中使用的对象 .

    粘贴代码以便我们提供更多帮助 .

  • 0

    对我来说这个代码间接造成了崩溃 . 如果我正确读取崩溃转储

    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]
    

    正在触发NSURLConnectionLoaderThread . 这可能是他们用于异步支持的内容 . 但是当我使用同步请求时,我无法在线程运行时释放对象 . 如果你问我,这是IOS 7中的一个错误 .

    NSMutableURLRequest* request = [self setupRequestWithService:service andMethod:operation];
    
        [request addValue:CONTENT_TYPE_APPLICATION_JSON forHTTPHeaderField:REQUEST_HEADER_CONTENT_TYPE];
        [request setHTTPMethod:@"POST"];
    
        NSError* error = nil;
        NSData* jsonData = nil;
    
        NSAssert(message,@"Message must not be null");
    
        jsonData = [NSJSONSerialization dataWithJSONObject:[message toDictionary] options:kNilOptions error:&error];
    
        NSAssert(! error, @"Message could not be json serialized");
    
        Log(@"----------------------------------------------------------------------");
        Log(@"JSON DATA: - %@", [[NSString alloc] initWithData:jsonData
                                                         encoding:NSUTF8StringEncoding]);
        Log(@"----------------------------------------------------------------------");
    
        [request setHTTPBody:jsonData];
    
        // Send Synchronous Request
        NSURLResponse *response = nil;
        error = nil;
        NSData* responseData = nil;
        NSString* responseString = nil;
    
        responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    

相关问题