仪器报告内存泄漏。不明白为啥
Posted
技术标签:
【中文标题】仪器报告内存泄漏。不明白为啥【英文标题】: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:]
,因为并非所有字母都编码为一个字符。
【参考方案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 报告了已泄漏对象的创建位置,而不是实际泄漏的代码?真的很难追踪原因。 你可以试试这个:不要调用这个函数,看看是否还有东西泄漏。 我无法重现内存泄漏!你能发布这个方法的调用吗?以上是关于仪器报告内存泄漏。不明白为啥的主要内容,如果未能解决你的问题,请参考以下文章