【发布时间】:2011-08-25 17:24:59
【问题描述】:
我的应用在 Lion 从睡眠中醒来时崩溃。 问题似乎与正在寻找天气信息的后台线程有关。 我不确定,但我认为崩溃日志告诉我自动释放池正在弹出不再存在的对象,有人可以帮我确认一下吗?
以下是崩溃日志的相关详细信息:
进程:myApp [14187] 标识符:myApp 版本:
??? (???) 代码类型:X86-64 (Native) 父进程:launchd [224]日期/时间:2011-08-24 18:58:00.581 -0400 操作系统版本:Mac OS X 10.7.1 (11B26) 报告版本:9
崩溃的线程:7
异常类型:EXC_BAD_ACCESS (SIGSEGV) 异常代码: KERN_INVALID_ADDRESS 在 0x0000000000000010
应用程序特定信息:objc[14187]:垃圾收集是 关闭
线程 7 崩溃:0 libobjc.A.dylib
0x00007fff9321700b(匿名 命名空间)::AutoreleasePoolPage::pop(void*) + 385 1
com.apple.CoreFoundation 0x00007fff961306a5 CFAutoreleasePoolPop + 37 2 com.apple.Foundation
0x00007fff969350d7 -[NSAutoreleasePool 排水] + 154 3
com.piso13.opusDomini 0x00000001000acb91 -[天气 internalStart] + 417 4 com.apple.Foundation
0x00007fff9698b1ea -[NSThread main] + 68 5 com.apple.Foundation
0x00007fff9698b162 NSThread_main + 1575 6 libsystem_c.dylib
0x00007fff90b068bf _pthread_start + 335 7 libsystem_c.dylib
0x00007fff90b09b75 thread_start + 13
这是我的天气内部启动代码:
-(void)internalStart{
pool = [[NSAutoreleasePool alloc] init];
forecast = FALSE;
liveweather = FALSE;
NSString *query = [self generateQuery];
if (query == nil) {
[pool drain];
return;
}
XmlWrapper * xmlWrapper = [[XmlWrapper alloc] initWithQuery:query delegate:self name:@"liveweather"];
[xmlWrapper release];
query = [self generateForecastQuery];
xmlWrapper = [[XmlWrapper alloc] initWithQuery:query delegate:self name:@"forecast"];
[xmlWrapper release];
[pool drain];
}
我什至应该打电话给 [pool drain] 吗?
【问题讨论】:
-
这里看起来没什么问题...你能展示一些
generateForecastQuery或generateQuery吗?或者你的XmlWrapper班级? -
你从哪里复制了崩溃日志?这一切都被错误包装了。请从您的 ~/Library/Logs 文件夹中的原始崩溃日志文件中复制它并编辑您的问题以包含带有代码格式的文本。
-
在创建
XMLWrapper对象后立即释放它们是一个危险信号。你为什么要这样做? -
Peter 崩溃日志不在我的电脑中,它是发送给我的。我很抱歉。
标签: cocoa nsthread nsautoreleasepool crash-log