我是iPhone线程编程的新手,我有点失落。
我有一个函数解析XML并生成一个在主背景上工作正常的对象数组,但我需要在后台执行,所以我调用performSelectorInBackground,但调试器抛出一个EXC_BAD_ACCESS,我试图调试它但它崩溃了在不同的点,当我运行仪器以获取内存泄漏时,应用程序不会崩溃。
有关调试我的应用的任何建议吗?
提前致谢。
我已经改变了但是错误仍在继续。 EXC_BAD_ACCESS在NSXMLParserDelegate中抛出,我使用NSLog跟踪它,每行执行不同的编号,每次执行都会在不同的行中崩溃...
我完全失去了
您对共享资源的意思是什么?例如XML文件?
这是在后台运行的代码。
NSAutoreleasePool *arPool = [[NSAutoreleasePool alloc] init];
//Cargamos las noticias desde el servidor.
NSString *metadataPath = [[NSBundle mainBundle] pathForResource:@"classes" ofType:@"xml"];
RESTXML *restXML = [[RESTXML alloc] initWithXMLMetadata:metadataPath];
NSString *testXMLPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
NSData *xmlData = [NSData dataWithContentsOfFile:testXMLPath];
NSMutableArray *latestNews = [(NSMutableArray*)[restXML REST2Object:@"doc" andXML:xmlData] retain];
[self performSelectorOnMainThread:@selector(uploadTableData) withObject:nil waitUntilDone:NO];
[arPool release];
你能指点我一些关于iPhone中互斥的文档吗?
非常感谢你的时间
答案 0 :(得分:1)
如果您正在使用多个线程,请确保已为访问线程之间共享资源的所有位置添加了互斥锁(使用@synchronize关键字)。
答案 1 :(得分:1)
您可以尝试更改该行:
[self performSelectorOnMainThread:@selector(uploadTableData) withObject:nil waitUntilDone:NO];
与
[self performSelectorOnMainThread:@selector(uploadTableData) withObject:nil waitUntilDone:YES];
如果您的表视图访问在您的线程中创建的数据。