0

考虑以下方法,我在其中构建一个字符串并返回它。我想释放字符串的构建块,但是字符串基于不再存在的值。怎么办?

我是否泄漏了内存,如果是,我该如何纠正?

- (NSString) getMiddahInEnglish:(int)day{
NSArray *middah = [[NSArray alloc] initWithObjects:@"Chesed", @"Gevurah", @"Tiferes", @"Netzach", @"Hod", @"Yesod", @"Malchus"];
NSString *firstPartOfMiddah = [NSString stringWithFormat: @"%@", [middah objectAtIndex: ((int)day% 7)-1]];
NSString *secondPartOfMiddah = [NSString stringWithFormat: @"%@", [middah objectAtIndex: ((int)day / 7)]];

NSString *middahStr = [NSString string@"%@ She'bi@%", firstPartOfMiddah, secondPartOfMiddah];

[middah release];
[firstPartOfMiddah release];
[secondPartOfMiddah release];

return middahStr;

}

在方法结束时,返回字符串,middahStr还没有被释放。这是一个问题吗?我在泄漏内存吗?

4

1 回答 1

4

恰恰相反:你过度释放。

middah你分配和初始化。然后你释放它。一切都很好。

firstPartOfMiddah并且secondPartOfMiddah,您调用 NSString "stringWith" 便捷方法。这相当于调用 alloc、init和 autorelease。您释放它们是一个错误,因为它们本质上是自动释放以供稍后发布。

middahStr您调用便捷方法,但将其返回。一切都很好。稍后将由自动释放池释放。

经验法则(我相信有很多例外):如果你不分配它,就不要释放它。

于 2010-04-01T03:32:52.060 回答