NSString内存生命周期

时间:2014-04-13 11:56:25

标签: objective-c

尝试了解Objective C中的内存管理。任何帮助将不胜感激。

NSString * myString;

上面的内容是什么,它是否为myString分配内存?如果是这样那么多少字节? 如果myString的声明为myString对象分配内存,那么编译器或运行时系统将如何知道myString对象将接收多大的字符串。我的意思是字符串可以是任何长度。那么应该分配多少内存?

myString =[NSString stringWithFormat:@"Testing String"];

当对象不再使用时,内存会发生什么?在应用程序运行之前,是否会释放内存或者是否会被myString的内容占用?

1 个答案:

答案 0 :(得分:4)

NSString *myString;不分配字符串。而是保留足够的字节来将指针保存到字符串中;该指针的生命周期取决于代码行放置的位置(并且不可控制)。

myString =[NSString stringWithFormat:@"Testing String"];执行分配*,字符串大小足以保存由您的格式产生的字符串;在这种情况下足够的字符“测试字符串”。

myString指针超出范围,并假设没有任何其他字符串副本时,如果您使用ARC ,则将取消分配该字符串。如果您不使用ARC,则在完成ARC后,您有责任解除分配。

分配: 一般来说,Objective C分配看起来像pointer = [Class alloc];,实际上它更像是pointer = [[Class alloc] init];(或任何类的其他init*方法)。 [NSString stringWithFormat:(NSString *), ...]方法可以方便地导致(完全或基本上)[[NSString alloc] initWithFormat:(NSString *), ...]