我注意到,通过查看Apple的示例代码,他们倾向于设计接收结构而不是多个参数的方法.这是为什么?就易用性而言,我个人更喜欢后者,但就性能而言,是否有比另一种更好的选择?
[pencil drawPoint:Point3Make(20,40,60)] [pencil drawPointAtX:20 Y:50 Z:60]
shek.. 5
不要担心性能问题.不要过早优化(直到你知道你有问题)并且在考虑代码中的性能热点时,它几乎总是在处理I/O的区域(例如,数据库,文件).因此,将有关消息传递样式的问题与性能分开.您希望首先做出最佳设计决策,然后仅在需要时优化性能.
话虽如此,Apple不推荐或更喜欢传递多个参数与结构/对象.如果在Objective-C的范围之外推广它,则在特定场景中使用个体参数或对象时使用它们.换句话说,你可以不遵循黑白答案.相反,在决定时使用以下准则:
当方法理解对象的许多/所有成员时,传递对象/结构
当您要验证对象的各个成员之间的关系的某些规则时,传递对象/结构.这允许您确保方法的使用者在调用方法之前构造有效对象(从而消除了验证这些条件的方法的需要).
当明确方法有意义并且只需要某些元素而不是整个对象时,传递单个参数
使用您的示例的变体,采用两个坐标(X和Y)的绘制方法将受益于获取Point对象而不是两个变量X和Y.
方法retrieveOrderByIdAndName最好通过获取单个id和name参数而不是某个容器对象来设计.
现在,如果有一些方法可以通过许多不同的标准来检索订单,那么它将创建一个retrieveOrderByCriteria并传递一些标准结构.
不要担心性能问题.不要过早优化(直到你知道你有问题)并且在考虑代码中的性能热点时,它几乎总是在处理I/O的区域(例如,数据库,文件).因此,将有关消息传递样式的问题与性能分开.您希望首先做出最佳设计决策,然后仅在需要时优化性能.
话虽如此,Apple不推荐或更喜欢传递多个参数与结构/对象.如果在Objective-C的范围之外推广它,则在特定场景中使用个体参数或对象时使用它们.换句话说,你可以不遵循黑白答案.相反,在决定时使用以下准则:
当方法理解对象的许多/所有成员时,传递对象/结构
当您要验证对象的各个成员之间的关系的某些规则时,传递对象/结构.这允许您确保方法的使用者在调用方法之前构造有效对象(从而消除了验证这些条件的方法的需要).
当明确方法有意义并且只需要某些元素而不是整个对象时,传递单个参数
使用您的示例的变体,采用两个坐标(X和Y)的绘制方法将受益于获取Point对象而不是两个变量X和Y.
方法retrieveOrderByIdAndName最好通过获取单个id和name参数而不是某个容器对象来设计.
现在,如果有一些方法可以通过许多不同的标准来检索订单,那么它将创建一个retrieveOrderByCriteria并传递一些标准结构.