NSString对象需要是alloc和init吗?

时间:2009-03-12 01:07:25

标签: objective-c string nsstring

Noob问题:

我目前的印象是,当您想要创建对象时,您需要allocinit该对象。

但是,我见过几个示例代码,其中声明了NSString个对象,但我看到没有allocinit个消息......

一个非常简单的例子:

NSString *myString = @"Hello World";

NSLog(@"%@" , myString);

有人可以解释为什么会这样吗?

2 个答案:

答案 0 :(得分:12)

声明变量不需要释放任何内存。

实例化对象。如果您调用 alloc copy

,您只能实例化一个新对象

在您的示例中,您将设置对编译器根据硬编码字符串创建的现有对象的引用。而且你没有必要管理它的内存,因为你没有实例化它。

我不知道我是否能够清楚地解释它。

修改

看起来已经有一个问题可以回答这个问题:

Is a literal NSString autoreleased or does it need to be released?

答案 1 :(得分:6)

当您在代码中嵌入NSString文字时,例如@"hello, world',编译器会在您的可执行文件中为其分配空间,并将其加载到内存中并在程序启动时初始化。

由于它是您的可执行文件的一部分,因此它适用于您应用的整个生命周期。没有必要保留或释放它。您为其创建的NSString *myString变量是指向内存中放置NSString文字的位置的指针。