iOS中缓慢的默认访问崩溃
我已经在iOS上编程3年了,大量使用核心数据。然而,我从未遇到过这样的碰撞,也不知道为什么会发生这种情况。当前的应用程序只有4个非常简单的视图控制器,保存到NSDEFAULT的时间只有5次左右。我感到困惑的错误是“对key ClientState的慢速默认访问耗时0.037632秒,容差为0.020000”。我已经注意到,在我的代码中,问题出在我的代码中。此外,这是在加载视图控制器很久之后。此过程在按下按钮后发生。最后,这种崩溃只发生了一半的时间,这意味着有时代码实际工作时没有崩溃iOS中缓慢的默认访问崩溃,ios,nsuserdefaults,Ios,Nsuserdefaults,我已经在iOS上编程3年了,大量使用核心数据。然而,我从未遇到过这样的碰撞,也不知道为什么会发生这种情况。当前的应用程序只有4个非常简单的视图控制器,保存到NSDEFAULT的时间只有5次左右。我感到困惑的错误是“对key ClientState的慢速默认访问耗时0.037632秒,容差为0.020000”。我已经注意到,在我的代码中,问题出在我的代码中。此外,这是在加载视图控制器很久之后。此过程在按下按钮后发生。最后,这种崩溃只发生了一半的时间,这意味着有时代码实际工作时没有崩溃 NSUse
NSUserDefaults *ab = [NSUserDefaults standardUserDefaults];
NSString *frcrat = [ab objectForKey:@"frcrat"];
NSString *lapper = [alertView textFieldAtIndex:0].text;
spinner.hidden = NO;
[spinner startAnimating];
delem = NULL;
delem = [[NSMutableArray alloc] init]; //Line after this line gives error Thread 1: Exc_bad_access (code = 1, address=0xe0bb2f85)
NSString *urlString = [[NSString stringWithFormat:@"http://www.mywebsite.com/enum.php?fracat=%@&num=%@&sap=%@", frcrat, lapper, _sna]stringByAddingPercentEscapesUsingEncoding : NSUTF8StringEncoding ];
NSXMLParser *Parser = [[[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:urlString]] autorelease];
[Parser setDelegate:self];
[Parser parse];
我假设此代码位于视图控制器初始化中的某个位置 您收到的警告意味着视图控制器加载时间过长,这显然是由于代码中的
initWithContentsOfURL:
调用造成的
正如您所看到的,initWithContentsOfURL:
是阻塞的,这意味着您永远不应该在主线程上调用它。您应该异步执行XML解析器初始化。比如:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *urlString = [[NSString stringWithFormat:@"http://www.mywebsite.com/enum.php?fracat=%@&num=%@&sap=%@", frcrat, lapper, _sna]stringByAddingPercentEscapesUsingEncoding : NSUTF8StringEncoding ];
NSXMLParser *parser = [[[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:urlString]] autorelease];
[parser setDelegate:self];
[parser parse];
}
它甚至与nsuser默认值无关。那是因为弦乐。相反,我将该字符串保存在nsuserdefaults中,并在需要时将其重新加载为NSString*snameri。感谢apple debugger给了我一个不恰当的错误。很有趣。虽然这不是在我的视图控制器初始化期间(它发生在从警报视图提交之后),但我将研究您的iniWithContentsOfURL阻止方法建议。它仍然给出了缓慢的默认错误。对不起,谢谢你的努力。