NSString对象需要是alloc和init吗?

Chr*_*isR 8 string objective-c nsstring

Noob问题:

我目前的印象是,当你想要创建一个对象时,你需要allocinit那个对象.

但是,我见过几个示例代码,其中NSString声明了一个对象,但我看到没有alloc或者init消息跟随...

一个非常简单的例子:

NSString *myString = @"Hello World";

NSLog(@"%@" , myString);
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*sta 12

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

实例化对象.如果调用alloccopy,则只实例化一个新对象

在您的示例中,您将设置对编译器从硬编码字符串创建的现有对象的引用.并且您不必管理其内存,因为您没有实例化它.

我不知道我是否足够清楚地解释它.

编辑:

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

文字NSString是自动释放还是需要发布?


Don*_*hey 6

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

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