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

far*_*adf 0 iphone cocoa objective-c

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

NSString *s = [[NSString alloc] initWithString:someOtherStringVariable];
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
Run Code Online (Sandbox Code Playgroud)

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

NSString *s = [[NSString alloc] initWithString:someOtherStringVariable];
NSString *s2 = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[s release];
Run Code Online (Sandbox Code Playgroud)

现在,如果其他字符串是常量,如@"其他字符串",该怎么办?我需要担心泄漏吗?即.

NSString *s = [[NSString alloc] initWithString:@"Some other string"];
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
Run Code Online (Sandbox Code Playgroud)

谢谢

sbo*_*oth 7

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

NSString *s = [[[NSString alloc] initWithString:@"Some other string"] autorelease];
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
Run Code Online (Sandbox Code Playgroud)

您也可以使用NSMutableString来实现这一点(如果这不是一个名义上的例子).

  • 确实,您不必释放/手动内存管理字符串文字.但是,在您的代码中,您不直接分配字符串文字,而是先执行[NSString alloc].只要有了alloc,就需要一个(自动)版本.这不会泄漏:NSString*s = @"Some string"; s = [...]; (3认同)