可能重复:
NSString 分配和初始化
我想知道为什么有些对象不需要初始化并分配内存。我读到这个:为什么有些对象在objective-c中使用之前不需要初始化?他们说该方法date
为today
. 但是如果我只是写了NSString *str = @"Hello";
它是否仍然被初始化和分配?
可能重复:
NSString 分配和初始化
我想知道为什么有些对象不需要初始化并分配内存。我读到这个:为什么有些对象在objective-c中使用之前不需要初始化?他们说该方法date
为today
. 但是如果我只是写了NSString *str = @"Hello";
它是否仍然被初始化和分配?
当编译器看到@"Hello"
时,它会在 .o 文件中粘贴一个符号,上面写着“嘿,dev 想要一个带有内容的字符串"Hello"
。当链接器将所有内容链接在一起时,它会唯一化所有字符串并发出一个包含所有字符串的字符串表那里面定义的代码。
因此,实际上,编译器在编译和链接时“分配和初始化”字符串实例。
它们实际上以NSString
类簇的特定子类可以封装的特殊格式存储。当你的应用程序运行时,这个子类的实例已经存在并且简单地映射到内存中。
所以,不,没有分配和初始化。但是,是的,仍然是各种意义上的对象。唯一需要注意的是,它们忽略了保留/释放/自动释放,因此,当您这样做时NSString* foo = @"foo";
,从技术上讲,也应该retain
编辑。但是,按照惯例,没有人会打扰,这很好。