考虑以下方法,我在其中构建一个字符串并返回它。我想释放字符串的构建块,但是字符串基于不再存在的值。怎么办?
我是否泄漏记忆,如果是,我该如何纠正?
- (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
尚未释放。这是一个问题吗?我泄漏了记忆吗?
答案 0 :(得分:4)
恰恰相反:你过度释放。
middah
你分配和初始化。然后你释放它。一切都很好。
firstPartOfMiddah
和secondPartOfMiddah
,您调用NSString“stringWith”便捷方法。这相当于调用alloc,init,和autorelease。你发布它们是一个错误,因为它们基本上是自动释放以便稍后发布。
middahStr
你调用了方便方法,但是返回它。一切都很好。它将在稍后由自动释放池发布。
经验法则(我确定有很多例外):如果你没有分配它,不要释放它。