【问题标题】:performSelectorInBackground error debuggingperformSelectorInBackground 错误调试
【发布时间】:2011-02-21 11:11:04
【问题描述】:

我是 iPhone 线程编程的新手,我有点茫然。

我有一个函数可以解析 XML 并生成在主背景上正常工作的对象数组,但我需要在后台执行,所以我调用 performSelectorInBackground,但调试器抛出 EXC_BAD_ACCESS,我试图调试它但它崩溃在不同的点上,当我运行 Instruments 以获取内存泄漏时,应用程序不会崩溃。

对调试我的应用有什么建议吗?

提前致谢。


我已经更改了它,但错误仍然存​​在。 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 中互斥锁的文档吗?

非常感谢您的宝贵时间

【问题讨论】:

    标签: iphone objective-c multithreading


    【解决方案1】:

    如果您使用多个线程,请确保您已为您访问线程间共享资源的所有位置添加互斥锁(使用 @synchronize 关键字)。

    【讨论】:

      【解决方案2】:

      您可以尝试更改该行:

      [self performSelectorOnMainThread:@selector(uploadTableData) withObject:nil waitUntilDone:NO];

      [self performSelectorOnMainThread:@selector(uploadTableData) withObject:nil waitUntilDone:YES];

      如果您的表视图访问在您的线程中创建的数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-08
        • 2018-03-12
        相关资源
        最近更新 更多