解析效果很好。
-(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/