新NSObject的最佳实践是什么 - alloc / init或更改现有的?

时间:2012-09-25 12:48:28

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

我想对iOS5及更高版本(启用ARC)的最佳实践有所了解。例如,我有一个带汽车的数据库 - 图像,名称,最大速度等信息。在应用程序中,我必须显示一个带有信息的汽车,然后,在用户交互后 - 下一辆车,然后是下一个......没有任何移动到前一个。

如果我有班级汽车,那么哪种解决方案更好?为什么?

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

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

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

先谢谢

2 个答案:

答案 0 :(得分:4)

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

为从数据库中读取的每辆汽车创建Car实例没有任何问题。

答案 1 :(得分:2)

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

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

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