2015-04-04 33 views
0

大家都说在目标c中,所有对象都存储在堆中。编译器可以在堆上为对象分配内存

谁负责将对象存储在堆中,是编译器?

NSString * myName = @“xyz”;

在上面的代码行中,在编译时创建的对象。为什么? @“xyz”是否存储在堆或堆栈中?

回答

1

静态数据(在编译时定义的数据)存储在二进制文件(可执行文件,库或框架)中。当加载该二进制文件时,静态数据会随着它加载到内存中。它不在堆或堆栈中。

这包括Objective-C字符串文字,例如@"xyz"

+0

有什么方法可以将字符串存储在堆中吗?这样你就可以在不再需要的时候释放它。如果字符串文字总是存储在静态内存中,那么如果您只在一秒钟内使用该字符串,将会浪费空间。 – JoJo 2015-04-04 05:44:48

+0

您无法取消分配编译时字符串文字。如果你想要类似的东西,把你的字符串放在你在运行时加载的数据文件中。 – 2015-04-04 05:48:42