【问题标题】:Memory issue for global variable and class variable on iPhone/iPad/iPod touchiPhone/iPad/iPod touch 上的全局变量和类变量的内存问题
【发布时间】:2011-03-14 15:48:57
【问题描述】:

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

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

例子:

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

问候,

-萨达特

【问题讨论】:

  • iPad/iPhone 或 objective-c 术语出现,因为内存问题。我不知道在 iPad/iPhone 和 Objective-c 的情况下全局/类变量如何影响内存。

标签: iphone objective-c ipad global-variables class-variables


【解决方案1】:

这不是 Objective C 或 iPad 系列设备特有的问题。

变量应该具有它们需要的最小“可见性”和“持续时间”,仅此而已。

您必须提出一些非常令人信服的理由来尝试通过我们的代码审查流程获取全局变量。它们几乎总是可以用更合适的东西代替。


回应您的评论:

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

here 上有一个很好的 sn-p,它详细说明了如何处理类级别的变量。这些是普通的 C 文件范围变量,因此它们在文件外不可见,但您只能为类获得一个,而不是为您实例化的每个对象获得一个。

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

而且,如果不需要在文件外读取,就不要提供initCount 方法。

【讨论】:

  • 撇开Snark,这个答案已经死了。将变量的范围限制在使用范围内会带来更好、更模块化的设计。如果以后还得加并发的话,也有很大的帮助。
  • iPad/iPhone 或 Objective-c 出现,因为内存问题。我不知道全局/类变量如何影响内存。
【解决方案2】:

这是一种颠倒的答案,但根本不要使用全局变量——坚持使用类方法和预期的封装。其他任何事情,你都会从黄昏到黎明与可可图书馆战斗。如果你遵循他们的模式,包括类方法、封装、委托等 - 你会以相对较少的努力取得巨大的进步。

在我的努力中,我唯一可能认为将某些东西称为“全局变量”的地方是项目范围的常量 - 所以根本不是变量,但有时整个项目都需要一个常量(TableViewCell 标识符来记住)

【讨论】:

    猜你喜欢
    • 2022-11-16
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多