我正在进行JSON数据解析,包含大量图像下载和数据解析。我有以下解析代码
- (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解析器,应用程序在一段时间间隔后崩溃。在仪器中,由于内存不足警告,应用程序崩溃。
答案 0 :(得分:1)
这是一个非常错误的假设,大多数开发人员在使用SBJSONParser时都有内存泄漏。 SBJSONParser没有任何泄漏,并且不会在代码中引入泄漏。 确实INSTRUMENTS告诉你泄漏是由于SBJSONParser,但它表示其他东西。泄漏是因为您实施SBJSONParser API的方式。你必须在代码中做错了。
转到乐器中的泄漏点。打开“扩展详细信息”工具栏,查看有泄漏的代码行。仪器告诉你最近泄漏的地方。
答案 1 :(得分:0)
更好的选择是使用作为iOS 5及以上版本
的一部分的NSJSONSerialization
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSMutableDictionary *values = [NSJSONSerialization JSONObjectWithData:receivedData options:NSJSONReadingMutableContainers error:&error];
}
答案 2 :(得分:0)
终于得到了解决方案。只需使用以下行进行JSON解析。删除NSMutableDictionary并使用id:
NSError *jsonError = nil;
id allValues = [NSJSONSerialization JSONObjectWithData:webdata
options:0
error:&jsonError];
NSArray *array = [allValues objectForKey:@"Contestants"];