【问题标题】:Do NSString objects need to be alloc and init?NSString 对象是否需要分配和初始化?
【发布时间】:2010-10-12 19:53:40
【问题描述】:

菜鸟问题:

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

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

一个非常简单的例子:

NSString *myString = @"Hello World";

NSLog(@"%@" , myString);

有人能解释一下为什么会这样吗?

【问题讨论】:

    标签: objective-c string nsstring


    【解决方案1】:

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

    实例化对象。如果你调用 alloccopy

    ,你只会实例化一个新对象

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

    我不知道我解释得够不够清楚。

    编辑:

    似乎已经有一个问题可以回答这个问题:

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

    【讨论】:

    • 谢谢塞尔吉奥...我现在明白了。
    • @"..." 结构是在 Foundation、Core Foundation 的头文件中声明的,还是编译器会处理这些?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多