2008-12-03 62 views
2

我注意到Apple的示例代码,他们倾向于设计接收结构而不是多个参数的方法。这是为什么?就易用性而言,我个人比较喜欢后者,但就性能而言,是否有更好的选择?方法:多个参数或结构?

[pencil drawPoint:Point3Make(20,40,60)] 
[pencil drawPointAtX:20 Y:50 Z:60] 

回答

5

不要混淆这个问题,关注性能。不要过早地进行优化(直到你知道你有问题),并且在考虑代码中的性能热点时,它几乎总是在处理I/O(如数据库,文件)的领域。因此,将消息传递风格与性能分开。您想首先做出最佳设计决策,然后仅在需要时才会针对性能进行优化

就这么说,Apple并不推荐或者更喜欢传递多个参数与结构/对象。在Objective-C范围之外推广这一点,在特定场景中有意义时使用个体参数或对象。换句话说,你可以遵循一个黑白的答案。相反,决定何时使用以下准则:

  • 传递对象/结构时是有意义的方法来了解对象的许多/所有成员时要在验证一些规则
  • 传递对象/结构对象的各个成员之间的关系。这使您可以确保方法的使用者在调用方法之前构造一个有效的对象(从而不需要方法来验证这些条件)。
  • 通行证个别参数,它是明确的方法是有道理的,只需要一定的元素,而不是整个对象

在你的例子使用的变化,涂料的方法,它有两个坐标(X和Y)将从拍摄点对象,而不是两个变量X和Y

的方法retrieveOrderByIdAndName的最好办法是采取单一的ID和名称参数,而不是一些容器对象设计中获益。

现在,如果有一些方法可以通过许多不同的标准检索订单,它会使更多的发送来创建retrieveOrderByCriteria并将其传递给一些标准结构。

1

如果围绕它传递相同的参数集,将它们传递到结构中很有用,因为它们在语义上属于一起。

对于如3分的简单结构,性能命中可能可以忽略不计。使用可读/可重复使用的解决方案,然后分析您的代码,如果你认为它很慢:)

+0

所以你的意思是理论上,结构具有更好的性能? – 2008-12-03 01:27:12