Objective c 为什么';NST字符串需要分配和初始化内存吗?

Objective c 为什么';NST字符串需要分配和初始化内存吗?,objective-c,memory,memory-management,initialization,allocation,Objective C,Memory,Memory Management,Initialization,Allocation,可能重复: 我想知道为什么有些对象不需要初始化和分配内存。我读到了:他们说方法date初始化并为今天的分配了内存。但是如果我写的是NSString*str=@“Hello”它是否仍然被初始化和分配?当编译器看到@“Hello”时,它会在.o文件中粘贴一个符号,上面写着“嘿,dev想要一个包含内容的字符串”Hello“。当链接器将所有内容链接在一起时,它将唯一地显示所有字符串,并发出一个字符串表,其中包含代码在其中定义的所有字符串 因此,实际上,编译器正在编译和链接时“分配和初始化”字符串实例

可能重复:


我想知道为什么有些对象不需要初始化和分配内存。我读到了:他们说方法
date
初始化并为
今天的
分配了内存。但是如果我写的是
NSString*str=@“Hello”它是否仍然被初始化和分配?

当编译器看到
@“Hello”
时,它会在.o文件中粘贴一个符号,上面写着“嘿,dev想要一个包含
内容的字符串”Hello“
。当链接器将所有内容链接在一起时,它将唯一地显示所有字符串,并发出一个字符串表,其中包含代码在其中定义的所有字符串

因此,实际上,编译器正在编译和链接时“分配和初始化”字符串实例

它们实际上是以一种特殊格式存储的,
NSString
类集群的特定子类可以对其进行封装。当你的应用程序运行时,这个子类的实例已经存在,并且被简单地映射到内存中


所以,不,没有分配和初始化。但是,是的,在这个词的每一个意义上仍然是对象。唯一需要注意的是,它们忽略了retain/release/autorelease,因此,当您执行
NSString*foo=@“foo”,从技术上讲,它也应该被
保留
编辑。但是,按照惯例,没有人会打扰,这很好。

当编译器看到
@“Hello”
时,它会在.o文件中粘贴一个符号,上面写着“嘿,dev想要一个包含
内容的字符串”Hello“
。当链接器将所有内容链接在一起时,它将唯一地显示所有字符串,并发出一个字符串表,其中包含代码在其中定义的所有字符串

因此,实际上,编译器正在编译和链接时“分配和初始化”字符串实例

它们实际上是以一种特殊格式存储的,
NSString
类集群的特定子类可以对其进行封装。当你的应用程序运行时,这个子类的实例已经存在,并且被简单地映射到内存中

所以,不,没有分配和初始化。但是,是的,在这个词的每一个意义上仍然是对象。唯一需要注意的是,它们忽略了retain/release/autorelease,因此,当您执行
NSString*foo=@“foo”
,从技术上讲,这也应该是
保留的
版本。但是,按照惯例,没有人会打扰,这很好