我使用Xcode中的“Leaks”工具继续获得以下内存泄漏。由于这是一个库,我只是想知道什么是解决这种泄漏的最佳方法。任何帮助将不胜感激。如果需要,我很乐意分享更多代码。
更新:我发现这篇文章似乎并不乐观。有没有人对如何解决这个问题有任何建议?
http://code.google.com/p/json-framework/issues/detail?id=13
这就是我使用图书馆的方式。
- (void)getFacebookProfileFinished:(ASIHTTPRequest *)request {
NSString *responseString = [request responseString];
NSMutableDictionary *responseJSON = [responseString JSONValue]; //memory leak 100%
NSString *username;
NSString *firstName = [responseJSON objectForKey:@"first_name"];
NSString *lastName = [responseJSON objectForKey:@"last_name"];
NSString *facebookId = [responseJSON objectForKey:@"id"];
if (firstName && lastName) {
username = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
} else {
username = @"";
}
UIAppDelegate.userSessionId = facebookId;
UIAppDelegate.userFullName = username;
if (UIAppDelegate.userSessionId != nil) {
Service1 *service = [[Service1 alloc] init];
[service UserExists:self action:@selector(handlerUserExists:) facebookUserId:UIAppDelegate.userSessionId];
[service release];
} else {
[Utility displayAlertMessage:@"There has been an error. Please try again later." withTitle:@"Error"];
[self logoutCompletely];
}
}
答案 0 :(得分:6)
通过评论你的if(第50行)的正文,你已经让你的释放(第51行)有条件。注释掉if(第49行)。
但是,说过你以前的方法有同样的问题,但显然没有警告,或者它从未使用过?
答案 1 :(得分:2)
正如CRD上面所说的那样。您的JSONFragmentValue中存在相同的泄漏。这是一个正确的非泄漏版本。
- (id) JSONFragmentValue
{
SBJasonParser *jsonParser = [SBJasonParser new];
id repr = [jsonParser fragmentWithString:self];
if (repr == nil)
{
NSLog(@"JSonFragmentValue failed:%@", [jsonParser ErrorTrace]);
}
[jsonparser release], jsonParser = nil;
return repr;
}
或者如果您更喜欢自动释放池。
- (id) JSONFragmentValue
{
SBJasonParser *jsonParser = [SBJasonParser new] autorelease];
id repr = [jsonParser fragmentWithString:self];
if (repr == nil)
{
NSLog(@"JSonFragmentValue failed:%@", [jsonParser ErrorTrace]);
}
return repr;
}