考虑如下方法,其中,我建立的字符串并返回它。我想释放字符串的基石,但随后的字符串基于不再存在的价值。怎么办?

我是否泄漏内存,如果是这样,我怎么能纠正呢?

- (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还没有被释放。这是个问题吗? am我泄漏存储器?

有帮助吗?

解决方案

恰恰相反:您正在过度释放

middah你alloc和初始化。然后你将其释放。一切都很好。

firstPartOfMiddah secondPartOfMiddah,调用一个NSString “stringWith” 简便方法。这相当于调用页头,初始化,,并自动释放。您释放他们是一个错误,因为他们基本上是给自动释放晚些时候发布。

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

经验法则(我敢肯定有很多例外的):如果你不这样做的alloc它,不要松开

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top