【问题标题】:Why doesn't NSString need memory to be allocated and initialized? [duplicate]为什么 NSString 不需要分配和初始化内存? [复制]
【发布时间】:2012-07-30 00:01:53
【问题描述】:

可能重复:
NSString allocation and initializing

我想知道为什么有些对象不需要初始化和分配内存。我读到这个:Why do some objects not need to be initialized before use in objective-c? 他们说date 方法为today 初始化并分配了内存。但是如果我只是写了NSString *str = @"Hello";,它是否仍然被初始化和分配?

【问题讨论】:

    标签: objective-c memory memory-management initialization allocation


    【解决方案1】:

    当编译器看到 @"Hello" 时,它会在 .o 文件中添加一个符号,上面写着“嘿,开发人员想要一个内容为 "Hello" 的字符串。当链接器将所有内容链接在一起时,它会唯一化所有字符串并发出一个字符串表,其中包含代码中定义的所有字符串。

    因此,实际上,编译器在编译和链接时“分配和初始化”字符串实例。

    它们实际上以NSString 类簇的特定子类可以封装的特殊格式存储。当你的应用程序运行时,这个子类的实例已经存在并且只是映射到内存中。

    所以,不,没有分配和初始化。但是,是的,仍然是各种意义上的对象。唯一需要注意的是,它们忽略了保留/释放/自动释放,因此,当您执行 NSString* foo = @"foo"; 时,技术上也应该是 retained。但是,按照惯例,没有人会打扰,这很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-12
      • 2021-10-16
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      相关资源
      最近更新 更多