假设我有一个已经通过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]];
由于
答案 0 :(得分:7)
这绝对是一个漏洞。处理这类问题的最简单方法是尽快自动发布:
NSString *s = [[[NSString alloc] initWithString:@"Some other string"] autorelease];
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
你也可以使用NSMutableString来做到这一点(如果这不是一个名义上的例子)。