在ipad应用上使用iOS 4.3
我有一个自定义的NSOperation,它使用http请求来处理在NSOperationQueue中使用操作的xml片段。在大多数情况下,应用程序运行正常但是,特别是在设备上测试应用程序崩溃时,这总是在主线程的后台/单独线程上。我已将此表现为各种错误,包括臭名昭着的
warning: check_safe_call: could not restore current frame
我已经削减了我的代码并发现我操作中的start方法似乎是罪魁祸首。
-(void)start
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
self.handledElements = [NSArray arrayWithObjects:@"el1", @"el2", @"el3", nil];
if (![NSThread isMainThread])
{
[self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:NO];
return;
}
// problem is here !!
[self willChangeValueForKey:@"isExecuting"];
_isExecuting = YES;
[self didChangeValueForKey:@"isExecuting"];
context = xmlCreatePushParserCtxt(&simpleSAXHandlerStruct, self, NULL, 0, NULL);
if(_urlIsRelative == YES){
self.request = [[MyHttpRequest alloc] initWithRelativeUrl:self.url andDelegate:self];
}
else {
self.request = [[MyHttpRequest alloc] initWithAbsoluteUrl:self.url andDelegate:self];
}
self.characterBuffer = [[NSMutableData alloc] init];
[self.request startRequest];
[pool drain];
}
违规行似乎是willChangeValueForKey:@“isExecuting”如果我删除与KVO相关的行我根本无法让应用程序崩溃,如果我将它们添加回来我会得到随机错误,似乎总是指向获得关键值遵守计数。虽然我的应用程序有效,但我宁愿按预期编写start方法,KVO通知会由我处理,任何想法?
答案 0 :(得分:1)
我有一个观察的单身人士课程 每次操作的输出 - 马特38 分钟前
....对于isExecuting更改通知(观察),该单例是完全并发安全的吗?
答案 1 :(得分:0)
这似乎是libxml的一个问题,我已经更新了我的版本,问题现在已经消失......