gpt4 book ai didi

objective-c - NSScanner 类别方法中的泄漏

转载 作者:行者123 更新时间:2023-12-03 17:45:01 28 4
gpt4 key购买 nike

我创建了一个 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 字节),但如果可以的话我想正确地做到这一点。提前致谢。

最佳答案

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

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

  1. 使用 Instruments 运行您的应用...泄漏。
  2. 在 Instruments 中,观察泄漏 block View (底部的网格图标)并打开扩展细节。
  3. 如果您有多个泄漏对象,请点击显示三角形,以便您可以查看离散地址。
  4. 地址旁边有一个详细箭头。单击它。
  5. 现在您将回顾历史。它从 Malloc 开始,向您展示每个保留和释放。

您应该有一个 malloc 的释放版本和历史记录中的每个保留的释放版本。匹配你的保留和释放并寻找奇怪的东西。如有疑问,请查看页面底部并仔细检查您可能忘记在 dealloc 方法中释放的任何属性。

关于objective-c - NSScanner 类别方法中的泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2462475/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com