我想知道为什么有些对象不需要初始化并分配内存。我读了这个:Why do some objects not need to be initialized before use in objective-c?他们说方法date
初始化并为today
分配了内存。但是,如果我刚写了NSString *str = @"Hello";
它是否仍然初始化并分配了?
答案 0 :(得分:5)
当编译器看到@"Hello"
时,它会在.o文件中添加一个符号,表示“嘿,dev想要一个内容为"Hello"
的字符串。当链接器将所有内容链接在一起时,它就是唯一的 - 如果所有字符串并发出一个字符串表,其中包含代码在其中定义的所有字符串。
因此,实际上,编译器在编译和链接时“分配和初始化”字符串实例。
它们实际上以特殊格式存储,NSString
类集群的特定子类可以封装。当您的应用程序运行时,此子类的实例已经存在,并且只是映射到内存中。
所以,不,没有分配和初始化。但是,是的,仍然是每个意义上的对象。唯一需要注意的是,他们忽略了保留/释放/自动释放,因此,当您执行NSString* foo = @"foo";
时,技术上也应该retain
。但是,按照惯例,没有人会烦恼,那也没关系。