解析效果很好。

-(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调用使用非原子属性的委托。

最佳答案

我不太确定为什么它不能在category方法中起作用,但是您是否尝试过在调用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/

10-09 07:03