NSString stringByAppendingString内存问题

时间:2010-03-05 15:39:33

标签: memory nsstring

在iPhone上使用objective-c:

我想用字符串附加,但我可以使用自动释放吗?这是对的吗?

NSString *str1 = [[NSString alloc] initWithString:@"STR1"];
NSString *str2 = [[NSString alloc] initWithString:@"STR2"];

NSString *s = [[str1 autorelease] stringByAppendingString:[str2 autorelease]];

这会删除* str1和* str2内存吗?

例如,如果我有方法:

+(void) doSomething
{
    NSString *str1 = [[NSString alloc] initWithString:@"STR1"];
    NSString *str2 = [[NSString alloc] initWithString:@"STR2"];

    NSString *s = [[str1 autorelease] stringByAppendingString:[str2 autorelease]];
    [[NSClassFromString(s) alloc] init];
}

我应该释放* s指针???

1 个答案:

答案 0 :(得分:3)

一般规则是,如果您致电alloc,则必须在该资源上拨打release

因此,对于您的第一个示例,str1和str2 从内存中删除,但是您没有遵循自动释放的约定。而是将自动释放添加到分配行:

NSString *str1 = [[[NSString alloc] initWithString:@"STR1"] autorelease];
NSString *str2 = [[[NSString alloc] initWithString:@"STR2"] autorelease];

对于第二个示例,因为您没有为stringByAppendingString方法调用alloc,所以您不需要释放s

阅读iPhone Memory Management指南。这是值得的前期投资,因此您不必在未来处理这些问题。之后,请阅读Akosma Software's博文。