首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存在componentsSeparatedByString内存泄漏的NSArray

存在componentsSeparatedByString内存泄漏的NSArray
EN

Stack Overflow用户
提问于 2011-04-05 20:45:39
回答 1查看 1.6K关注 0票数 0

我在这个函数中遇到了内存泄漏的问题。我认为用componentsSeparatedByString创建NSArray是自动释放,但仪器似乎表明在NSArray aPair的泄漏。为什么它会指示那里有泄漏,而不是以相同的方式创建的其他NSArrays也有泄漏?

代码语言:javascript
运行
复制
-(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];
    }
}

此函数由以下对象调用:

代码语言:javascript
运行
复制
    - (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];
}

谢谢--

EN

回答 1

Stack Overflow用户

发布于 2011-07-22 15:31:45

你必须用泄漏工具更深入地挖掘。您泄漏的是数组中的一个字符串,而不是数组本身。Leaks表示该行,因为这是数组中的字符串被分配的位置。

进入Leaks,查看泄漏的实例,然后单击那个小箭头按钮。您将看到泄漏对象的所有保留和释放,这应该会指出问题所在。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5552037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档