Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSScanner分类方法中的漏洞_Objective C_Cocoa_Memory Leaks_Categories - Fatal编程技术网

Objective c NSScanner分类方法中的漏洞

Objective c NSScanner分类方法中的漏洞,objective-c,cocoa,memory-leaks,categories,Objective C,Cocoa,Memory Leaks,Categories,我创建了一个NSScanner分类方法,显示仪器中的泄漏 - (BOOL)scanBetweenPrefix:(NSString *)prefix andSuffix:(NSString *)suffix intoString:(NSString **)value { NSCharacterSet *charactersToBeSkipped = [self charactersToBeSkipped]; [se

我创建了一个NSScanner分类方法,显示仪器中的泄漏


- (BOOL)scanBetweenPrefix:(NSString *)prefix 
                andSuffix:(NSString *)suffix 
               intoString:(NSString **)value
{
    NSCharacterSet *charactersToBeSkipped = [self charactersToBeSkipped];
    [self setCharactersToBeSkipped:nil];

    BOOL result = NO;

    // find the prefix; the scanString method below fails if you don't do this
    if (![self scanUpToString:prefix intoString:nil])
    {
        MY_LOG(@"Prefix %@ is missing.", prefix);
        return result;
    }

    //scan the prefix and discard
    [self scanString:prefix intoString:nil];

    // scan the important part and save it
    if ([self scanUpToString:suffix intoString:value]) // this line leaks
    {
        result = YES;
    }
    [self setCharactersToBeSkipped:charactersToBeSkipped];
    return result;
}

我想这是我向方法传递值/从方法传递值的方式,但我不确定。这是一个小漏洞(32字节),但如果可以的话,我想纠正它。提前谢谢。

好吧,我很笨。这种方法不会泄漏。漏洞在我的调用堆栈的下面,但我不知道在哪里。对不起,这篇文章太早了。如果我自己无法解决问题,我会在找出真正的漏洞所在后继续跟进

对于Yuji的评论,我的方法调用是:


    NSString *title;
    [fileScanner scanBetweenPrefix:kTitlePrefix 
                         andSuffix:kTitleSuffix 
                        intoString:&title];

问题出在标题&上吗?我根据现有的NSScanner方法和调用对其进行了模式化处理。

我找到了答案。我有一个模型类,它使用了上面代码的结果,但是忘记了在dealloc方法中释放属性。我本应该用仪器抓住它的,但我不知道该去哪里找。我陷入了扩展细节的调用堆栈中,其中只有我需要的部分信息

对于像我这样的白痴,我是这样做的:

  • 用仪器运行你的应用程序。。。泄露
  • 在Instruments中,查看泄漏块视图(底部的网格图标)并打开扩展细节
  • 如果您有多个泄漏对象,请单击“泄漏三角形”,以便查看离散地址
  • 在地址旁边,将有一个详细箭头。点击它
  • 现在你将看到历史。它从Malloc开始,向您展示了每个retain和release
    您应该有一个malloc版本和一个历史记录中每个retain的版本。匹配你的保留和释放,寻找古怪的东西。如果有疑问,请查看页面底部,仔细查看您可能忘记在dealloc方法中发布的任何属性。

    您是如何调用此方法的?您在调用时是如何准备
    (NSString**)value
    的?Yuji,谢谢您的回复。我无法格式化注释中的代码,因此请参见下面的答案。考虑到泄漏内存的分配位置,最有可能的解释是,无论您如何在该代码后使用title,您都在泄漏该字符串。jluckyiv:我认为category方法或其使用都没有任何错误。查看Instruments中
    标题
    对象地址的历史记录,看看是什么保留了它而没有释放它。Peter,谢谢你的建议。我仍然在寻找我的方法。