3

是否应该使用@property将经常访问的变量,例如粒子的位置?@property为变量创建 getter 和 setter,这增加了调用方法的开销。在大多数情况下,这并不明显,但是如果该属性每秒被访问一百万次(在不同的实例中)怎么办?

4

3 回答 3

4

您是正确的,Objective-C 运行时将为访问器增加一定数量的开销@property。然而,这是在 Objective-C 类之间共享信息的公认方式。如果您已经测量了您的应用程序并确定@property开销实际上是一个处理瓶颈,您应该只考虑一种不同的方法。

请记住,现代处理器在GHz范围内运行,而“每秒一百万次”发生的事情仅在MHz范围内。很有可能,您的瓶颈将在其他地方。

如果你确实有问题,你总是可以在Particle一个更大的 Objective-CParticleCloud类中的一组简单结构上进行粒子处理。这将允许您的程序的其余部分忽略Particle对象的确切实现,同时消除对@property访问器的需要。

于 2012-05-08T21:44:50.243 回答
1

你真的在使用getter和setter吗?如果没有,请不要使用属性。如果是这样,请使用它。知道开销是否显着的唯一方法是进行自己的性能测试并记录过程前后的时间,运行完全相同的模拟并比较经过的时间。如果它对性能有影响,但可以忽略不计,请不要担心。您甚至可能会发现使用 @property 比您使用的任何其他方法更快。

于 2012-05-08T21:45:21.697 回答
0

在我看来,你应该使用@property你的对象的属性。我知道这听起来很愚蠢,但我所说的属性是指其他类可以访问的“公共”属性。如果只有你的类需要那个属性,那么在你的实现中保持它是私有的,事情会更顺畅和更干净。

@property 的好处之一是您可以指定是否希望它们是只读的(即没有设置器)。所以这确实是公共 API 的问题。

于 2012-05-08T21:48:37.637 回答