我在这个函数中遇到了内存泄漏的问题。我认为用componentsSeparatedByString创建NSArray是自动释放,但仪器似乎表明在NSArray aPair的泄漏。为什么它会指示那里有泄漏,而不是以相同的方式创建的其他NSArrays也有泄漏?
-(void) checkRequest: (NSString *)request view:(UIViewController *)theView webView:(UIWebView *)wView
{
//NSLog(@"JSResponder - checkRequest()");
NSString *aRequest = [NSString stringWithString:request];
NSArray *urlArray = [aRequest componentsSeparatedByString:@"?"];
if([urlArray count] > 1)
{
NSString *paramsString = [urlArray lastObject];
NSString *cmd = @"";
NSArray *urlParamsArray = [paramsString componentsSeparatedByString:@"&"];
int numCommands = [urlParamsArray count];
NSMutableDictionary *paramsWithNames = [[NSMutableDictionary alloc ] initWithCapacity:numCommands];
for (NSString *elementPair in urlParamsArray)
{
NSArray *aPair = [elementPair componentsSeparatedByString:@"="];
NSString *aKey = [aPair objectAtIndex:0];
NSString *aParam = [aPair objectAtIndex:1];
if([aKey compare:@"_command"] == NSOrderedSame)
{
cmd = aParam;
}
else
{
[paramsWithNames setValue: aParam forKey:aKey];
}
}
[self executeCommand: cmd withParams: paramsWithNames view:theView webView:wView];
[paramsWithNames release];
}
}
此函数由以下对象调用:
- (void)pullJSEvent:(NSTimer*)theTimer
{
NSLog(@"MainView - pullJSEvent()");
NSString *jsCall = [NSString stringWithString:@"if(typeof checkOBJCEvents == 'function'){checkOBJCEvents();}"];
NSString *jsAnswer = [[webView stringByEvaluatingJavaScriptFromString:jsCall] retain];
if([jsAnswer compare:@"none"] != NSOrderedSame)
{
//NSLog(@" answer => %@", jsAnswer);
[jsResponder checkRequest:jsAnswer view:(UIViewController *)self webView:self.webView];
}
[jsAnswer release];
}
谢谢--
发布于 2011-07-22 15:31:45
你必须用泄漏工具更深入地挖掘。您泄漏的是数组中的一个字符串,而不是数组本身。Leaks表示该行,因为这是数组中的字符串被分配的位置。
进入Leaks,查看泄漏的实例,然后单击那个小箭头按钮。您将看到泄漏对象的所有保留和释放,这应该会指出问题所在。
https://stackoverflow.com/questions/5552037
复制相似问题