0

在此处输入图像描述在此处输入图像描述我正在使用大量图像下载和数据解析进行 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 解析器,应用程序在一段时间后崩溃。在仪器中,由于内存不足警告,它使应用程序崩溃。在此处输入图像描述

4

3 回答 3

1

大多数开发人员在使用 SBJSONParser 时都认为它存在内存泄漏,这是一个非常错误的假设。SBJSONParser 没有任何泄漏,也不会在您的代码中引入泄漏。确实,INSTRUMENTS 告诉您泄漏是因为 SBJSONParser,但它表示其他东西。泄漏是因为您实现 SBJSONParser API 的方式。您一定在代码中做错了什么。

去你仪器的泄漏处。打开扩展详细信息工具栏,查看有泄漏的代码行。Instruments 会告诉您最近的泄漏位置。

于 2012-10-29T13:17:27.533 回答
0

更好的选择是使用NSJSONSerialization它作为 iOS 5 及更高版本的一部分

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
  {  
    NSMutableDictionary *values = [NSJSONSerialization JSONObjectWithData:receivedData options:NSJSONReadingMutableContainers error:&error];
}
于 2012-10-29T13:22:17.127 回答
0

终于得到了解决方案。只需使用下面的行进行 JSON 解析。删除 NSMutableDictionary 并使用 id :

 NSError *jsonError = nil;

 id allValues = [NSJSONSerialization JSONObjectWithData:webdata
                                                   options:0
                                                     error:&jsonError];

 NSArray *array = [allValues objectForKey:@"Contestants"];
于 2012-11-26T07:16:07.183 回答