Noob问题:
我目前的印象是,当您想要创建对象时,您需要alloc
和init
该对象。
但是,我见过几个示例代码,其中声明了NSString
个对象,但我看到没有alloc
或init
个消息......
一个非常简单的例子:
NSString *myString = @"Hello World"; NSLog(@"%@" , myString);
有人可以解释为什么会这样吗?
答案 0 :(得分:12)
声明变量不需要释放任何内存。
实例化对象。如果您调用 alloc 或 copy
,您只能实例化一个新对象在您的示例中,您将设置对编译器根据硬编码字符串创建的现有对象的引用。而且你没有必要管理它的内存,因为你没有实例化它。
我不知道我是否能够清楚地解释它。
修改强>
看起来已经有一个问题可以回答这个问题:
Is a literal NSString autoreleased or does it need to be released?
答案 1 :(得分:6)
当您在代码中嵌入NSString
文字时,例如@"hello, world'
,编译器会在您的可执行文件中为其分配空间,并将其加载到内存中并在程序启动时初始化。
由于它是您的可执行文件的一部分,因此它适用于您应用的整个生命周期。没有必要保留或释放它。您为其创建的NSString *myString
变量是指向内存中放置NSString
文字的位置的指针。