【发布时间】:2011-06-20 08:20:54
【问题描述】:
例如看下面的例子:
代码1
-(NSString*)getString{
return [[[NSString alloc] initWithFormat:@"test"] autorelease];
}
-(void)printTestString{
NSString *testStr = self.getString;
[testStr retain]
NSLog(@"%@",testStr);
[testStr release]
}
代码2
-(NSString*)getString{
return [[NSString alloc] initWithFormat:@"test"];
}
-(void)printTestString{
NSString *testStr = self.getString;
NSLog(@"%@",testStr);
[testStr release];
}
代码 1 和代码 2 应该是有效的代码片段,并且不应出现泄漏。
代码 1 使用自动释放,因此返回变量必须保留在 printTestString 中,并在使用后释放。所以这里有一个小的开销,因为自动释放。
代码 2 不会在 getString 中释放 NSString,因此您只需在使用后释放它。似乎你必须少写,而且你没有开销,因为没有使用自动释放。
哪一种是实际使用的“标准”方法?
我问自己的另一件事。 getString 中的自动释放和保留与
[testStr retain]
是个问题,当自动释放池在释放变量之后
NSString *testStr = self.getString;
那么字符串就会消失。这是可能的还是编译器阻止了这种事情?
谢谢
-赛博
【问题讨论】:
-
@MusiGenesis 这是我推荐的方法:如果您不喜欢 Obj-C,请不要在其中编程,也不要回答人们的 Obj-C 问题。
标签: iphone objective-c memory-management