【问题标题】:Memory leak reported by instrument. Can't understand why仪器报告内存泄漏。不明白为什么
【发布时间】:2015-03-29 06:54:59
【问题描述】:

Instruments 告诉我们,以下方法在创建可变字符串时会泄漏内存。谁能告诉我为什么?我在 iOS 8 XCode 6.2 上使用 ARC。

 - (NSString *)capitalizeFirstLetter {
        if (self.length == 0) {
            return self;
        }
        NSMutableString * string = [NSMutableString stringWithString:self.lowercaseString];
        [string replaceCharactersInRange:NSMakeRange(0, 1) withString:[self substringToIndex:1].capitalizedString];
        return string;
    }

【问题讨论】:

  • 请考虑使用-[NSString rangeOfComposedCharacterSequenceAtIndex:],因为并非所有字母都编码为一个字符。

标签: ios objective-c memory-leaks instruments


【解决方案1】:

我不确定导致泄漏的原因,但如果您只想避免泄漏,您可以将方法更改为:

- (NSString *)capitalizeFirstLetter {
    if (self.length == 0) {
        return self;
    }
    return [NSString stringWithFormat:@"%@%@", [self substringToIndex:1].capitalizedString, [self substringFromIndex:1]];
}

你也可以在这里查看答案Need help fixing memory leak - NSMutableString

【讨论】:

  • 我将实现更改为您建议的实现,并且 Instruments Stills 报告内存泄漏。会不会是 Instruments 报告了已泄漏对象的创建位置,而不是实际泄漏的代码?真的很难追踪原因。
  • 你可以试试这个:不要调用这个函数,看看是否还有东西泄漏。
  • 我无法重现内存泄漏!你能发布这个方法的调用吗?
猜你喜欢
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 2013-12-24
  • 2013-01-22
  • 2019-03-14
  • 1970-01-01
相关资源
最近更新 更多