为什么 MacOS 应用程序存储大量字符串?

Why do MacOS apps store a lot of strings?

为什么在 MacOS 中,我的应用程序在可执行文件中有很多字符串。就像一堆二进制非人类可读的废话,然后我看到一堆函数和变量名,类型名,像NSString和其他NS+什么字符串,很多OBJC+IIRC,但为什么呢?为什么要存储所有这些?除了膨胀可执行文件大小之外?

我无法具体针对 MacOS 二进制文件回答这个问题,但通常有 2 个原因导致二进制文件具有函数名称之类的东西:

  1. 它允许某人调试程序。如果没有这些符号,每个变量、函数、堆栈跟踪都会包含没有那么有用的信息。
  2. 在某些情况下,它允许其他进程调用另一个二进制文件中的函数。如果函数名称未编码,则其他程序无法通过其名称调用该函数(因为它没有名称)。

通常可以创建去除调试符号的二进制文件,这会减小二进制文件的大小。