实例变量是否会限制性能?一个班级应该有两个目的吗?

Emb*_*ess 0 performance objective-c cocos2d-iphone ios

我有一个有多个实例变量的类.我想在课堂上达到两个目的.我可能只将某些变量用于一个目的,有时可以同时使用这两个变量.

这是一个更具体的例子.我想创建一个类,每次用户点击屏幕时,狗精灵和猫精灵都会出现动画.如果再次点击,他们将继续执行不同的动画.但是,有时我只想让狗精灵出现并更新.还有一些其他罕见的时刻,我希望猫精灵在狗精灵出现之后出现几次.

问题是:实例变量是否分配了太多内存?我非常关心性能,因为我打算制作内存密集型游戏.由于我很难预测何时实际使用所有实例变量,我应该将它们分成两个类吗?让我们划分可能的场景以获得更好的想法.

  1. 只使用Dog Sprite并且cat sprite永远不会出现:如果留在一个类中,则cat的实例变量保持不变.

  2. 狗精灵首先出现,然后猫精灵出现:两个精灵最终都会出现.可以将它分成两个类,但是由于诸如触摸提前逻辑和动画之类的方法是相似的,因此一些方法是重复的.但是如果我们把它留在一次,那么可能会出现情景1,这可能会在没有重复复制很多代码的情况下解决.

其他事情可能会发生,但上面已经讨论过这些问题.从我的角度来看,这些是赞成和反对的:

  1. 一类方法

    • 避免一些重复的逻辑
    • 无需导入导致某些类似实例变量的多个标头

    • 精读

    • 可能会留下一半的实例变量未使用(包括NSString,CCSprite,很多整数和浮点数,CCAnimation,CCLabelBMFont)
  2. 两类方法

    • 更少的实例变量
    • 可能从类继承,而不会在将来继承一些不必要的变量

    • 精读

    • 一些逻辑被复制

我很难决定应该使用哪个选项.任何建议都会很棒!先感谢您!

if (didHelp) 
   for (int x = 0; x < 100; x++)
      NSLog(@"Thanks!");
Run Code Online (Sandbox Code Playgroud)

Lea*_*s2D 6

我非常关心表现

您和其他数千名缺乏经验的开发人员.说真的,你最有可能会遇到两件事:

  1. 你的想法是不成比例的,没有多少性能优化会使它发挥作用 - >改变你的想法
  2. 性能无关紧要,你只是浪费时间

性能是游戏开发人员在项目开始时需要考虑的最重要的事情之一.

为什么?

案例#2是不言而喻的.

在您开始之前以合理的准确度评估案例#1需要经验.即使这样,也很困难.如果功能X在技术上具有挑战性(或不可能),那么只需制定一个备份计划.如果您无法评估性能,并且您的想法不适用于任何备份计划,那么您有两个选择:

  1. 实现不同的想法
  2. 创建一个快速原型来找出峰值性能参数:内存使用情况,CPU和GPU利用率,加载时间以及其他适合的其他健身测试,以确定您的想法是否在几天内(如果不是几小时)可行.

实例变量是否分配了太多内存?

不,分配的内存与性能几乎没有关系.

您可以使用class_getInstanceSize来查看类实例使用的内存量.类实例很少会使用超过500字节.但是,这只计算为实例变量分配的内存 - 而不是实例变量可能指向的内存.在cocos2d应用程序中,可以说95%的内存使用量来自纹理.

我很难决定应该使用哪个选项

始终努力:

  • 写可读代码
  • 编写可维护的代码
  • 写更少的代码
  • 写更安全的代码
  • 只编写一次代码(避免重复)