我正在处理的应用程序遇到了一个我无法重现的非常奇怪的崩溃,我所知道的唯一信息来自Crashlytics。它只发生在ios7和谷歌搜索mmapFileDeallocate返回一个网站,其他人遇到相同的崩溃,但他们的问题消失了os更新。
这是堆栈:
Thread : Crashed: tcpConnWorkQueue
0 libobjc.A.dylib 0x3aa00b36 objc_msgSend + 21
1 CFNetwork 0x2fece4c3 __CFURLCache::removeMMappedDataFromSet(void*) + 34
2 CFNetwork 0x2fecfa45 mmapFileDeallocate(void*, void*) + 24
3 CoreFoundation 0x3024ef5f __CFDataDeallocate + 30
4 CoreFoundation 0x301c75f7 CFRelease + 462
5 CoreFoundation 0x3023fed5 __CFArrayReleaseValues + 292
6 CoreFoundation 0x301c75f7 CFRelease + 462
7 CFNetwork 0x2fe5f1d5 __CFCachedURLResponse::~__CFCachedURLResponse() + 40
8 CFNetwork 0x2fe5f19f __CFCachedURLResponse::~__CFCachedURLResponse() + 10
9 CoreFoundation 0x301c75f7 CFRelease + 462
10 CFNetwork 0x2feaeda1 HTTPProtocol::~HTTPProtocol() + 732
11 CoreFoundation 0x301c75f7 CFRelease + 462
12 CoreFoundation 0x302b10f0 __CFBasicHashDrain + 332
13 CoreFoundation 0x301c75f7 CFRelease + 462
14 CFNetwork 0x2fe9226b SocketStream::~SocketStream() + 406
15 CFNetwork 0x2fe920c5 SocketStream::~SocketStream() + 20
16 CoreFoundation 0x301c75f7 CFRelease + 462
17 libdispatch.dylib 0x3aee8d1b _dispatch_call_block_and_release + 10
18 libdispatch.dylib 0x3aeef273 _dispatch_queue_drain$VARIANT$mp + 374
19 libdispatch.dylib 0x3aeef06b _dispatch_queue_invoke$VARIANT$mp + 42
20 libdispatch.dylib 0x3aeefce1 _dispatch_root_queue_drain + 76
21 libdispatch.dylib 0x3aeeff59 _dispatch_worker_thread2 + 56
22 libsystem_pthread.dylib 0x3b02adbf _pthread_wqthread + 298
我可以在崩溃时发布其他主题,但唯一一个突出我的是AFNetworking,但我在他们的问题上找不到类似的东西。
答案 0 :(得分:7)
我们也看到这个报告给了崩解剂,目前只发生在iOS 7设备上。当它发生时,我们也有一个AFNetworking线程。
从这个SO thread,我们发现将缓存设置为零似乎可以消除崩溃,但这不是一个永久的解决方案。
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0
diskCapacity:0
diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
我们有一些其他的NSURLCache代码,我们认为我们目前正在测试,我会及时通知您。
<强>更新强>
我们似乎已经解决了这个问题。我们认为解决崩溃的代码是代码,当代码的另一部分正在使用它时,它会破坏[NSURLCache sharedURLCache]
。我们删除了修改[NSURLCache sharedURLCache]
的所有调用。
答案 1 :(得分:0)
我刚刚遇到了同样的崩溃。在我们设置更大的共享缓存之前,似乎我们正在使用缓存。应用程序启动后立即设置缓存修复了问题。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:kNSURLCacheInMemorySize
diskCapacity:kNSURLCacheFileStorageSize
diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];