通过查看Apple的示例代码,我注意到他们倾向于设计接收结构而不是多个参数的方法。这是为什么?就易用性而言,我个人更喜欢后者,但就性能而言,是否有比另一种更好的选择?
[pencil drawPoint:Point3Make(20,40,60)]
[pencil drawPointAtX:20 Y:50 Z:60]
答案 0 :(得分:5)
不要因为表现问题而混淆这个问题。不要过早优化(直到你知道你有问题)并且在考虑代码中的性能热点时,它几乎总是在处理I / O的区域(例如,数据库,文件)。因此,将有关消息传递样式的问题与性能分开。您希望首先做出最佳设计决策,然后仅在需要时优化性能。
话虽如此,Apple不建议或更喜欢传递多个参数与结构/对象。如果在Objective-C的范围之外推广它,则在特定场景中使用个体参数或对象时使用它们。换句话说,你可以不遵循黑白答案。相反,在决定时使用以下指南:
在你的例子中使用变体,采用两个坐标(X和Y)的绘制方法将受益于Point对象而不是两个变量X和Y.
方法retrieveOrderByIdAndName最好通过获取单个id和name参数而不是某个容器对象来设计。
现在,如果有一些方法可以通过许多不同的标准来检索订单,那么它会发送更多的send以创建一个retrieveOrderByCriteria并将其传递给一些标准结构。
答案 1 :(得分:1)
如果要传递相同的参数集,将它们传递给结构是很有用的,因为它们在语义上属于一起。
对于像3分这样简单的结构,性能上升可能微不足道。使用可读/可重用的解决方案,然后在您认为它很慢的情况下对您的代码进行概要分析:)