我怀疑是什么时候应该释放字符串。我没有对字符串进行任何分配是否有必要释放字符串?
答案 0 :(得分:0)
否,如果您没有“分配”它们自动释放的字符串。 例如
NSString *aTestString = [NSString stringWithFormat:@"Hello %@",@"World"];
此字符串是自动释放的,因此您无需调用[aTestString release];
如果你愿意:
NSString *aTestString = [[NSString alloc] initWithFormat:@"Hello %@",@"World"];
然后你需要通过[aTestString release]释放它;因为你手动分配。 因此,自动释放它是明智的,所以你不必在以后想到它
NSString *aTestString = [[[NSString alloc] initWithFormat:@"Hello %@",@"World"] autorelease];
但那与我给你的第一段代码相同。 回到这一点,只要您不自行分配,就不必手动释放它。
答案 1 :(得分:0)
是否通过调用alloc
,new
或包含copy
的方法创建了字符串?您是否自己明确retain
字符串?如果您从NSString
获得CFStringRef
,是否使用包含CFStringRef
的函数创建了create
?如果没有,您不必做任何事情。 If you did, you have to either release
or autorelease
the string.
答案 2 :(得分:0)
对象分配/释放规则
当且仅当:
时,您需要致电[Object release]
[Object alloc]
[Object retain]
[Object new]
如果您没有显式分配或保留对象,则需要将其释放。如果通过类方法获得了对象,则该方法执行如下操作:return [[[Object alloc] init] autorelease];
。这会分配一个新对象,但是当NSAutoReleasePool接下来有机会时会自动释放。