SBJSON解析器低内存警告

时间:2012-10-29 13:08:47

标签: iphone ios ipad sbjson

enter image description here enter image description here我正在进行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解析器,应用程序在一段时间间隔后崩溃。在仪器中,由于内存不足警告,应用程序崩溃。enter image description here

3 个答案:

答案 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"];