代码之家  ›  专栏  ›  技术社区  ›  Sadat

iPhone/iPad/iPod touch上全局变量和类变量的内存问题

  •  0
  • Sadat  · 技术社区  · 15 年前

    什么时候应该使用全局变量,什么时候使用类变量,为什么?

    我希望您的经验和想法能与我们分享,我们是这个平台的新手。

    例子:

    我需要在一个层上跟踪触摸事件的时间戳和位置(如触摸开始、结束)。我可以使用实现触摸事件的类的全局变量或类变量来跟踪它。我该怎么办?

    当做,

    -萨达特

    2 回复  |  直到 15 年前
        1
  •  2
  •   paxdiablo    15 年前

    这不是针对目标C或iPad系列设备的问题。

    变量应该具有它们所需要的最小“可见性”和“持续时间”,而不是更多。

    你得想出一些 非常 试图通过我们的代码审查过程获得全局变量的令人信服的理由。它们几乎总是能够被一些更合适的东西取代。


    回应您的评论:

    我不知道全局/类变量如何影响内存。

    有一个很好的片段 here 其中详细介绍了如何执行类级变量。这些是普通的C文件范围的变量,因此它们在文件外部不可见,但您只能为类得到一个变量,而不是为您实例化的每个对象得到一个变量。

    从这个意义上说,它们具有全局性的优点(存储空间最小,值仍然可以读取),而不存在缺点(污染全局名称空间,使类外的代码可以更改它)。

    如果不需要从文件外部读取,只需不提供 initCount 方法。

        2
  •  1
  •   heckj    15 年前

    这是一个有点自欺欺人的答案,但根本不使用全局变量——坚持使用类方法和预期的封装。任何其他的事情,从黄昏到黎明,你都将与可可图书馆抗争。如果您遵循它们的模式,包括类方法、封装、委托等,您将在相对较少的工作中取得巨大的进展。

    在我的工作中,我唯一可能想到称某个事物为“全局变量”的地方是项目范围内的常量——所以根本不是变量,但有时在整个项目中都需要一个常量(想到TableViewCell标识符)。