ios - 我的 NSXMLParser 在后台不工作

标签 ios nsxmlparser background-process

解析效果很好。

-(void) callParse
{
 parser = [[NSXMLParser alloc] initWithData:data];
 parser.delegate = self;
 [parser parse];
 [parser release];
}

我想在后台执行解析。此代码不进行任何解析。但是为什么?

 @interface NSXMLParser(Private)
- (void)myParse;
@end

@implementation NSXMLParser(Private)
- (void)myParse
{
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  [self parse];
  [pool drain];
}
@end

-(void) callParse2
{
 parser = [[NSXMLParser alloc] initWithData:data];
 parser.delegate = self;
 [NSThread detachNewThreadSelector:@selector(myParse) toTarget:parser withObject:nil];
 [parser release];
 }

更新:我调用 callParse2 4 次,它创建了 4 个线程。它做了一些解析,但结果很困惑。可能是我对同步变量有一些问题。 NSXMLParser 调用使用非原子属性的委托(delegate)。

最佳答案

我不完全确定为什么它不能在类别方法中工作,但您是否尝试过激活您从中调用 NSXMLParser 的对象上的线程?

- (void)startParsing{
//...

  [NSThread detachNewThreadSelector:@selector(parseXML:) 
                   toTarget:self withObject:parseData];

//..
}

- (void)parseXML:(id)parseData
{
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  NSXMLParser * parser = [[NSXMLParser alloc] initWithData:parseData];
  parser.delegate = self;
  [parser parse];
  [parser release];
  [pool drain];
}

关于ios - 我的 NSXMLParser 在后台不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9212543/

相关文章:

ios - cocos2d 中的 box2d 因 EXC_BAD_ACCESS 崩溃。如何调试?

ios - NSOperation 中的 NSXMLParser

xcode - 读取第一个元素后停止 XML 解析

ios - 在后台运行应用程序并播放一些音频和加速度计

java - 我可以让 Java 应用程序等待后台进程完成吗?

ios - 在 Swift 5 中使用可达性

Objective-C委托(delegate)

ios - 为 iOS 应用程序创建可分发的框架

c - 后台进程的信号处理