【问题标题】:What is best practice for new NSObject - alloc / init or change existing?新 NSObject 的最佳实践是什么 - alloc / init 或更改现有?
【发布时间】:2012-09-25 12:48:27
【问题描述】:

我想就 iOS5 及更高版本(启用 ARC)的最佳实践获得一些意见。例如,我有一个包含汽车的数据库——图像、名称、最大速度等信息。在应用程序中,我必须显示带有信息的汽车,然后,在用户交互之后 - 下一辆车,然后是下一辆车……而不是移动到上一辆。

如果我有一个 Car 类,那么哪个是更好的解决方案,为什么?

解决方案 1: 第一次使用 alloc 和 init 创建 Car 实例,然后每次我必须显示下一个实例时 - 只需通过更改现有值(速度从 250 到 180,颜色从黑变红等)

解决方案 2: 每次使用 alloc 和 init,允许 ARC 释放之前占用的内存,而忘记之前分配的对象。

解决方案 3: 可能还有其他解决方案,如何解决这个问题 - 我很想听听。

提前致谢

【问题讨论】:

    标签: objective-c ios5 automatic-ref-counting nsobject alloc


    【解决方案1】:

    如果你的类真的是一个 Car 类,它应该代表你数据库中的一辆汽车,而不是某种处理程序对象来显示数据库条目。如果你想这样做,你至少应该让它成为一个正确命名和配置的类来完成这种工作。

    为您从数据库中读取的每辆汽车创建一个 Car 实例并没有错。

    【讨论】:

    • 我也建议使用解决方案 2。使用数据初始化您的汽车类实例并正确处理它们。运行时将负责其余的工作。
    【解决方案2】:

    将图像从磁盘加载到内存可能需要的时间最长。因此,我认为您的解决方案之间的速度不会有任何显着差异。

    内存使用也大致相同。在您的第一种方法中,图像和所有其他实例变量将在您设置新值时被释放。在第二种方法中,整个 Car 实例将被释放,从而释放它的所有实例变量。

    从软件设计的角度来看,我建议使用第二种解决方案。一个 Car 实例应该准确地代表它,一个汽车的实例。只有一个实例然后一直更改它的值会产生误导。如果您想做类似的事情,我建议您将您的类重命名为 CarManager 之类的名称,并使用单例对象或使用类方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      相关资源
      最近更新 更多