方法:多个参数或结构?

时间:2008-12-03 01:16:31

标签: objective-c

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

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

2 个答案:

答案 0 :(得分:5)

不要因为表现问题而混淆这个问题。不要过早优化(直到你知道你有问题)并且在考虑代码中的性能热点时,它几乎总是在处理I / O的区域(例如,数据库,文件)。因此,将有关消息传递样式的问题与性能分开。您希望首先做出最佳设计决策,然后仅在需要时优化性能

话虽如此,Apple不建议或更喜欢传递多个参数与结构/对象。如果在Objective-C的范围之外推广它,则在特定场景中使用个体参数或对象时使用它们。换句话说,你可以不遵循黑白答案。相反,在决定时使用以下指南:

  • 当方法理解对象的许多/所有成员
  • 时,传递对象/结构
  • 如果要验证对象的各个成员之间关系的某些规则,请传递对象/结构。这允许您确保方法的使用者在调用方法之前构造有效对象(因此无需使用方法来验证这些条件)。
  • 当明确方法有意义且只需要某些元素而不是整个对象时,传递单个参数

在你的例子中使用变体,采用两个坐标(X和Y)的绘制方法将受益于Point对象而不是两个变量X和Y.

方法retrieveOrderByIdAndName最好通过获取单个id和name参数而不是某个容器对象来设计。

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

答案 1 :(得分:1)

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

对于像3分这样简单的结构,性能上升可能微不足道。使用可读/可重用的解决方案,然后在您认为它很慢的情况下对您的代码进行概要分析:)