我在这里泄漏记忆吗?

时间:2010-04-01 03:26:32

标签: objective-c iphone memory-management iphone-sdk-3.2

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

我是否泄漏记忆,如果是,我该如何纠正?

- (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尚未释放。这是一个问题吗?我泄漏了记忆吗?

1 个答案:

答案 0 :(得分:4)

恰恰相反:你过度释放。

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

firstPartOfMiddahsecondPartOfMiddah,您调用NSString“stringWith”便捷方法。这相当于调用alloc,init,和autorelease。你发布它们是一个错误,因为它们基本上是自动释放以便稍后发布。

middahStr你调用了方便方法,但是返回它。一切都很好。它将在稍后由自动释放池发布。

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