Ios 减少全局常量中的内存使用

Ios 减少全局常量中的内存使用,ios,objective-c,memory,Ios,Objective C,Memory,定义全局常量的方法很少:define、static const、extern。。。等 消耗更少内存的是什么? 我的.pch文件中有很多常量。首先,我想说的是,常量的范围比它们消耗的内存更重要 其次,取决于常量的内容,#define这是一个预处理器操作,因为它直接将结果注入到代码中。如果常数的使用量很小,那就好了。否则,手中的一切都一样。因为它是常量,所以对象将在运行时存储一次(或者取决于作用域,每个类或每个对象存储一次) 但实际上,除非你有几十万个变量,否则它不应该对记忆产生影响。请相信编译器会

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

首先,我想说的是,常量的范围比它们消耗的内存更重要

其次,取决于常量的内容,
#define
这是一个预处理器操作,因为它直接将结果注入到代码中。如果常数的使用量很小,那就好了。否则,手中的一切都一样。因为它是常量,所以对象将在运行时存储一次(或者取决于作用域,每个类或每个对象存储一次)


但实际上,除非你有几十万个变量,否则它不应该对记忆产生影响。请相信编译器会处理好它。

首先,我想说的是,常数的范围比它们消耗的内存更重要

其次,取决于常量的内容,
#define
这是一个预处理器操作,因为它直接将结果注入到代码中。如果常数的使用量很小,那就好了。否则,手中的一切都一样。因为它是常量,所以对象将在运行时存储一次(或者取决于作用域,每个类或每个对象存储一次)


但实际上,除非你有几十万个变量,否则它不应该对记忆产生影响。请相信编译器会处理好它。

外部程序将比静态程序消耗更少的内存,因为静态程序使用导入的头为每个文件创建一个常量,外部程序使用每个应用程序创建一个常量。

外部程序将比静态程序消耗更少的内存,因为静态程序使用导入的头为每个文件创建一个常量,extern为每个应用程序创建一个常量。

建议使用该常量。除非你是在一个内存非常有限的环境中,否则如果你不使用它,浪费的内存是很小的。框架中充满了这样的常量

然而,为了帮助理解:常量将使用内存作为字符串本身,并使用一个指针大小的内存块作为常量自身的存储—通常为4或8字节。除非是这样,否则您不使用它,并且编译器或链接器能够删除它;如果常量是全局可访问的,则不太可能出现这种情况,如果它是文件范围(静态)常量,则更可能出现这种情况。宏的内存使用也是编译器/链接器依赖的,但可能不止于常数-考虑到宏处理后编译器看到同一文字字符串的多个用途,可能在不同的文件中。

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

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

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

    建议使用常量。除非你是在一个内存非常有限的环境中,否则如果你不使用它,浪费的内存是很小的。框架中充满了这样的常量

    然而,为了帮助理解:常量将使用内存作为字符串本身,并使用一个指针大小的内存块作为常量自身的存储—通常为4或8字节。除非是这样,否则您不使用它,并且编译器或链接器能够删除它;如果常量是全局可访问的,则不太可能出现这种情况,如果它是文件范围(静态)常量,则更可能出现这种情况。宏的内存使用也是编译器/链接器依赖的,但可能不止于常数-考虑到宏处理后编译器看到同一文字字符串的多个用途,可能在不同的文件中。

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

  • 常数很可能会消耗少量的固定内存
  • 如果不使用,宏将不消耗内存
  • 如果只使用一次,宏将消耗与常量大致相同的内存,则差异(如果有的话)可以忽略不计
  • 如果在同一文件中多次使用,宏可能会占用更多内存
  • 如果在多个文件中多次使用,宏可能会占用更多内存
  • 总之,如果使用字符串,常数可能会占用更少的内存,最多可以忽略不计,所以不要担心它,除非您的内存非常有限;或者直到记忆成为问题