ios - 全局常量中的内存使用更少

标签 ios objective-c memory

定义全局常量的方法很少:define、static const、extern...等。
什么是消耗较少内存的?
我的 .pch 文件中有很多常量。

最佳答案

建议使用常量。除非您处于内存非常有限的环境中,否则如果您不使用它,那么浪费的内存是很微小的。框架中充满了这样的常量。

但是为了帮助理解:常量将使用内存来存储字符串本身,并使用一个指针大小的内存块来存储常量自己的存储空间——通常是 4 或 8 个字节。除非您不使用它并且编译器或链接器能够删除它;如果常量是全局可访问的,这不太可能,如果它是文件范围(静态)常量,则更有可能。宏的内存使用也取决于编译器/链接器,但可能比常量更多 - 考虑到在宏处理之后,编译器会看到同一文字字符串的多次使用,可能在不同的文件中。

因此,除非您非常了解您的编译器/链接器,并且它不会改变,否则您正在考虑可能性:

  • 该常量很可能会消耗少量固定的内存。
  • 如果不使用宏将不消耗内存。
  • 如果只使用一次宏将消耗与常量相同的内存,则差异(如果有)将可以忽略不计。
  • 如果在同一个文件中多次使用,宏可能会使用更多内存。
  • 如果在多个文件中多次使用,宏可能会使用更多内存。

  • 总之,如果使用字符串,常量可能会使用更少的内存,最多可以忽略不计,所以不要担心,除非你的内存非常有限;或者直到内存成为问题。

    关于ios - 全局常量中的内存使用更少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21882123/

    相关文章:

    ios - objective-c 中的 self

    iphone - 设置 UINavigationController 的 Root View

    c++ - 什么时候/为什么要使用 heapmin?

    ios - Auth.auth().createUser(withEmail : emailTextField. text!, password : passwordTextField. text!, completion : { (user: User? , error : Error? )

    ios - CustomTextField - 自动完成/自动更正不会在点击时关闭

    ios - 这个unicode加密会失败吗?

    memory - 每个内存位置、堆栈、堆等的目的是什么? (迷失在技术细节上)

    c++ - 堆栈和堆地址区域在 Windows 和 Linux 中是不同的

    ios - 如何将 URL 中的图像加载到 UIImage 数组中并使用 Swift 在 UIScrollView 中使用它们

    iphone - iOS如何确定收到的通知是针对MDM的?