我有一个小应用程序可以下载股票价格并且完美运行(多年),直到我最近升级到10.5.7.升级后,程序将在此调用时崩溃:
NSString *currinfo = [NSString stringWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://finance.yahoo.com/d/quotes.csv?s=%@&f=l1c1p2", escsymbol]]];
Run Code Online (Sandbox Code Playgroud)
奇怪的是,崩溃不会马上发生.这行代码被多次调用,没有任何问题,然后由于此调用崩溃,程序最终会在1-2小时后失败.
我原本在这里发了一篇很长的帖子,描述了我试图调查这个问题.我收到了两个建议:(i)使调用异步(可能更好)和(ii)使用NSZombieEnabled来调查Objective-C对象提前解除分配的可能性(此注释是为了响应显示失败的堆栈跟踪而做出的objc_msgSend).
我花了很多时间使调用异步(使用[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]),这没有帮助.该计划最终仍然失败,通常在10-15分钟后.在失败之前的这段时间内,许多异步调用没有任何问题,数据被返回等等.一切都很好.然后程序突然再次崩溃.
然后我打开了NSZombieEnabled.果然,当程序最终崩溃时,我收到了消息:
-[CFArray count]: message sent to deallocated instance 0x16b90bd0
Run Code Online (Sandbox Code Playgroud)
"info malloc 0x16b90bd0"随后产生:
0: 0x93db810c in malloc_zone_malloc
1: 0x946bc3d1 in _CFRuntimeCreateInstance
2: 0x9464a138 in __CFArrayInit
3: 0x946cd647 in _CFStreamScheduleWithRunLoop
4: 0x932d1267 in _Z16_scheduleRStreamPKvPv
5: 0x946bf15c in CFSetApplyFunction
6: 0x932b0e2b in CFNSchedulingSetScheduleReadStream
7: 0x9331a310 in _ZN12HTTPProtocol19createAndOpenStreamEv
8: 0x9332e877 in _ZN19URLConnectionLoader24loaderScheduleOriginLoadEPK13_CFURLRequest
9: 0x9332d739 in _ZN19URLConnectionLoader26LoaderConnectionEventQueue33processAllEventsAndConsumePayloadEP20XConnectionEventInfoI12XLoaderEvent18XLoaderEventParamsEl
10: 0x9332dbdd in _ZN19URLConnectionLoader13processEventsEv
11: 0x932d8dbf in _ZN17MultiplexerSource7performEv
12: 0x946ba595 in CFRunLoopRunSpecific
13: …Run Code Online (Sandbox Code Playgroud) 任何人都可以告诉我这次崩溃的原因.
特别是我担心这个 -
**Application Specific Information:
iMixtapes[1185] has active assertions beyond permitted time:
{(
<SBProcessAssertion: 0x66bc490> identifier: UIKitBackgroundCompletionTask process: iMixtapes[1185] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:1185 preventSuspend preventIdleSleep ,
<SBProcessAssertion: 0x66ade50> identifier: UIKitBackgroundCompletionTask process: iMixtapes[1185] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:1185 preventSuspend preventIdleSleep
)}
Elapsed total CPU time (seconds): 106.580 (user 62.160, system 44.420), -3% CPU
Elapsed application CPU time (seconds): 1.700, 0% CPU**
Run Code Online (Sandbox Code Playgroud)
这是崩溃日志:
Incident Identifier: C5DFDDE4-2AE0-461A-937A-C422353102CE
CrashReporter Key: 3a88f20a9e18f468445bddc212b7aa673c6dc89b
Hardware Model: iPod4,1
Process: iMixtapes [1185]
Path: /var/mobile/Applications/104BD0F8-BC33-43A9-AB9F-FC609750C4B6/iMixtapes.app/iMixtapes
Identifier: …Run Code Online (Sandbox Code Playgroud)