2010-03-05 37 views
0

与iPhone上的objective-c:NSString stringByAppendingString内存问题

我想使用字符串进行追加,但是可以使用autorelease吗?这是正确的吗?

 
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]; 
} 

应我的dealloc的* S指针???

回答

3

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

因此,对于您的第一个示例,str1和str2 从内存中删除,但是您不遵循约定您的autoreleases。取而代之的是自动释放添加到分配线:

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

对于第二个例子,因为你不是为stringByAppendingString方法调用页头,你并不需要释放s

通读iPhone Memory Management指南。这是值得的前期投资,所以你不必在路上处理这些问题。之后,通过Akosma Software's博客文章进行阅读。

+0

对不起,我mjme是str1和str2是userInterface,我编辑了文本 – okami 2010-03-05 15:49:48