重新分配变量时是否存在内存泄漏?

时间:2009-08-10 17:05:57

标签: iphone objective-c cocoa

假设我有一个已经通过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]];

由于

1 个答案:

答案 0 :(得分:7)

这绝对是一个漏洞。处理这类问题的最简单方法是尽快自动发布:

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

你也可以使用NSMutableString来做到这一点(如果这不是一个名义上的例子)。