Iphone SBJSON解析器内存不足警告
我正在进行JSON数据解析,下载了大量图像并进行数据解析Iphone SBJSON解析器内存不足警告,iphone,ios,ipad,sbjson,Iphone,Ios,Ipad,Sbjson,我正在进行JSON数据解析,下载了大量图像并进行数据解析 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSString *responseString = [[NSString alloc] initWithData:webdata encoding:NSASCIIStringEncoding]; [webdata release]; [connection rel
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *responseString = [[NSString alloc] initWithData:webdata encoding:NSASCIIStringEncoding];
[webdata release];
[connection release];
NSDictionary *values = [(NSDictionary*)[responseString JSONValue] objectForKey:@"UserId"];
NSDictionary *Active = [(NSDictionary*)[responseString JSONValue] objectForKey:@"Active"];
[responseString release];
NSString *UserID=[NSString stringWithFormat:@"%@",values];
NSString *Status=[NSString stringWithFormat:@"%@",Active];
[WSDelegate WServiceResponseMsg:@"WS_Authenticate_User" withResponse:UserID forParam:Status];
}
我有很多类使用上面的代码进行解析,但由于SBJSON解析器,应用程序在一段时间后崩溃。在instrument中,它给出了应用程序崩溃的原因是内存不足的警告。大多数开发人员在使用SBJSONParser时都有内存泄漏,这是一个非常错误的假设。SBJSONParser没有任何泄漏,也不会在代码中引入泄漏。 的确,INSTRUMENTS告诉您泄漏是由于SBJSONParser造成的,但它表示其他原因。泄漏是由于您实现SBJSONParser API的方式造成的。您的代码中一定有错误
去检查一下你仪器里的漏洞。打开“扩展详细信息”工具栏,查看泄漏的代码行。仪器会告诉您最近的泄漏位置。更好的选择是使用iOS 5及以上版本附带的
NSJSONSerialization
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSMutableDictionary *values = [NSJSONSerialization JSONObjectWithData:receivedData options:NSJSONReadingMutableContainers error:&error];
}
终于找到了解决方案。只需使用以下行进行JSON解析。删除NSMutableDictionary并使用id:
NSError *jsonError = nil;
id allValues = [NSJSONSerialization JSONObjectWithData:webdata
options:0
error:&jsonError];
NSArray *array = [allValues objectForKey:@"Contestants"];
是的,您是对的。问题在于实现SBJSON解析器。它在工具的扩展细节栏中给出内存不足警告,因为以下行NSDictionary值=[(NSDictionary)[responseString JSONValue]objectForKey:@“UserId”];但我不知道我的代码在内存管理中的作用是什么?你们在用字典值和活动值做什么。我很确定这两个字典的问题在于考虑使用ARC(自动引用计数)。没有理由不这样做。它使iOS的编码更加方便,并且很可能解决您的问题。SBJson 3.1需要ARC,否则它将泄漏。这不是SBJson中的错误。这里有很好的文档记录:我已经按照您的建议实现了代码,我面临着这方面的漏洞。在实现了您在上面给我的代码后,我上传了仪器的图像,但它在下面一行给出了100%的内存泄漏,所以您能告诉我内存管理的错误在哪里吗?