2009-08-10 60 views
0

假设我有一个已经通过alloc/init组合初始化为字符串的变量。如果我通过处理重新分配内存,是否会泄漏内存?重新分配变量时是否有内存泄漏?

NSString *s = [[NSString alloc] initWithString:someOtherStringVariable]; 
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

这里是否存在内存泄漏?如果是这样,我是否需要创建另一个变量(例如s2),执行此分配,然后释放原始?现在

NSString *s = [[NSString alloc] initWithString:someOtherStringVariable]; 
NSString *s2 = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
[s release]; 

,如果其他字符串就是一个常数,如@“其他的一些字符串”。我需要担心泄漏吗?即。

NSString *s = [[NSString alloc] initWithString:@"Some other string"]; 
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

感谢

回答

7

这绝对是一个泄漏。照顾这样的问题,最简单的方法是自动释放宜早不宜迟:

NSString *s = [[[NSString alloc] initWithString:@"Some other string"] autorelease]; 
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

你也可以使用的NSMutableString要做到这一点为好,地方(如果这不是一个概念上的例子)。

+0

谢谢。你指出的例子是名义上的。我以为我曾经在某处读过,在任何情况下都有为字符串字面量分配内存,所以它永远不会被释放。所以它的保留数是无关紧要的。 – farhadf 2009-08-10 17:59:21

+3

的确,您不必释放/手动记忆管理字符串文字。但是,在你的代码中,你不要直接赋值字符串,而应该在[NSString alloc]之前。只要你有一个分配,你需要一个(自动)释放。这不会泄漏:NSString * s = @“一些字符串”; s = [...]; – 2009-08-10 18:32:44

+0

明白了。谢谢。 – farhadf 2009-08-12 16:15:44