gpt4 book ai didi

iphone - 第二次调用时使用 JSONKit 发生内存泄漏

转载 作者:行者123 更新时间:2023-11-28 20:45:36 25 4
gpt4 key购买 nike

我已经阅读了有关内存管理的 Apple 文档,感觉我理解了它们,但我不能让它不泄漏。在这个例子中,我让进程在主线程上运行以保持简单。第一次点击搜索按钮一切正常,没有泄漏。第二次单击/执行搜索时,一切正常,但仪器显示以下泄漏:

Leaked Object   #   Address Size    Responsible Library Responsible Frame
NSCFString,42 < multiple > 1.30 KB CTContacts jk_cachedObjects
NSCFString,16 < multiple > 464 Bytes CTContacts jk_cachedObjects
JKDictionary,7 < multiple > 224 Bytes CTContacts jk_object_for_token
Malloc 288 Bytes,7 < multiple > 1.97 KB CTContacts jk_object_for_token
Malloc 32 Bytes, 0x7859a30 32 Bytes CTContacts jk_object_for_token
JKArray, 0x78599f0 32 Bytes CTContacts jk_object_for_token

它似乎指向这一行:(列为 %100)

NSDictionary *resultsDictionary = [jsonData objectFromJSONDataWithParseOptions:JKParseOptionStrict error:(NSError **)error];

我试过 NSDictionary *resultsDictionary =[ [[NSDictionary alloc]init]autorelease];但结果相同。

下面是涉及到的两个方法:

- (void) searchBarSearchButtonClicked:(UISearchBar *)theSearchBar {    
pickerView.hidden=YES;
searchBar.showsScopeBar=YES;
[searchBar setShowsCancelButton:NO animated:YES];
[searchBar resignFirstResponder];

[self queryWebService];
}

-(void) queryWebService{

NSString *urlAddress = [NSString stringWithFormat:@"http://myweb.com/json.php?lname=%@&searchType=%@",searchBar.text,currentSearchCategory];

NSURL *url = [NSURL URLWithString:urlAddress];

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startSynchronous];
NSError *error = [request error];
if (!error){
NSString *responseString = [request responseString];
//NSLog(@"Response: %@", responseString);

NSData *jsonData = [responseString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error = nil;

NSDictionary *resultsDictionary = [jsonData objectFromJSONDataWithParseOptions:JKParseOptionStrict error:(NSError **)error];

if (resultsDictionary)
{
rows = [[resultsDictionary objectForKey:@"contacts"] retain];
resultsDictionary=nil;
}
}
[myTableView reloadData];
}

NSArray "rows"用作 tableView 数据源。任何帮助将不胜感激,谢谢。

最佳答案

我想 rows 是原因。每次运行循环时,都会向其添加另一个 retain。摆脱 retain 应该可以解决问题并摆脱内存泄漏。如果出于某种原因,retain 在那里是必需的,您只需要在其他地方找到一个地方来释放它,并将您的保留计数保持在适当的值

关于iphone - 第二次调用时使用 JSONKit 发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6549035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com