在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指针???
答案 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博文。