Objective c NSScanner分类方法中的漏洞
我创建了一个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
- (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方法中释放属性。我本应该用仪器抓住它的,但我不知道该去哪里找。我陷入了扩展细节的调用堆栈中,其中只有我需要的部分信息 对于像我这样的白痴,我是这样做的:
您应该有一个malloc版本和一个历史记录中每个retain的版本。匹配你的保留和释放,寻找古怪的东西。如果有疑问,请查看页面底部,仔细查看您可能忘记在dealloc方法中发布的任何属性。您是如何调用此方法的?您在调用时是如何准备
(NSString**)value
的?Yuji,谢谢您的回复。我无法格式化注释中的代码,因此请参见下面的答案。考虑到泄漏内存的分配位置,最有可能的解释是,无论您如何在该代码后使用title,您都在泄漏该字符串。jluckyiv:我认为category方法或其使用都没有任何错误。查看Instruments中标题
对象地址的历史记录,看看是什么保留了它而没有释放它。Peter,谢谢你的建议。我仍然在寻找我的方法。