0
我有這樣的方法:潛在的內存泄漏,沒有意義
-(NSString *)scrambleWordGenerator: (NSUInteger)length {
NSMutableString *scrambledWord = [[NSMutableString alloc] initWithString:@""];
for (int i = 0; i < length; i++) {
NSUInteger randomIndex = arc4random() % [self.arrayOfCharacters count];
NSString *randomCharacter = [NSString stringWithString:[self.arrayOfCharacters objectAtIndex:randomIndex]];
[scrambledWord insertString:randomCharacter atIndex:i];
}
NSString *finalWord = [[NSString alloc] initWithString:scrambledWord];
[scrambledWord release];
return finalWord;
}
它的工作原理,順順當當其實,然而在使用Xcode的「分析」功能,它說,finalWord
有潛力內存泄漏。
我想在創建NSString
時使用的預製方式是字符串將被自動釋放。我錯過了什麼?下面是錯誤的屏幕抓取:
編輯
的方法現在看起來是這樣的:
-(NSString *)scrambleWordGenerator: (NSUInteger)length {
NSMutableString *scrambledWord = [[NSMutableString alloc] initWithString:@""];
for (int i = 0; i < length; i++) {
NSUInteger randomIndex = arc4random() % [self.arrayOfCharacters count];
NSString *randomCharacter = [NSString stringWithString:[self.arrayOfCharacters objectAtIndex:randomIndex]];
[scrambledWord insertString:randomCharacter atIndex:i];
}
NSString *finalWord = [NSString stringWithString:scrambledWord];
[scrambledWord release];
return finalWord;
}
而且沒有更多的錯誤!
提示:你可以用'回替換最後一行[finalWord自動釋放]' – Costique 2012-02-04 19:26:59
你倆是驚人的,太感謝你了!我用Simon的建議,但Costique,我會考慮其他方法! – Max 2012-02-04 19:44:40
@LumBerry:顯式'autorelease'在'return'語句可以爲未來的可讀性很有幫助,尤其是在一個較長的方法。另一方面,您必須確保在最初寫入時不要將'autorelease'發送給無主對象。 – 2012-02-04 20:11:52