Ne confondez pas cette question avec des préoccupations liées aux performances. Ne faites pas d'optimisations prématurées (jusqu'à ce que vous sachiez que vous avez un problème) et lorsque vous pensez aux points chauds de votre code en matière de performances, c'est presque toujours dans les zones traitant des E/S (par exemple, la base de données, les fichiers). Donc, séparez votre question sur le style de passage des messages avec les performances. Vous voulez prendre d'abord la meilleure décision en matière de conception puis optimiser les performances seulement si nécessaire .
Cela dit, Apple ne recommande ni ne préfère le passage de plusieurs paramètres par rapport à une structure/un objet. Pour généraliser ce point en dehors du cadre de l'Objective-C, utilisez des paramètres ou des objets individuels lorsque cela a un sens dans un scénario particulier. En d'autres termes, il n'y a pas de réponse noire et blanche à suivre. Utilisez plutôt les lignes directrices suivantes pour prendre votre décision :
- Transmettre des objets/structures lorsqu'il est logique que la méthode comprenne plusieurs/toutes les composantes de l'objet.
- Passez des objets/structures lorsque vous souhaitez valider certaines règles sur la relation entre les différents membres de l'objet. Cela vous permet de vous assurer que le consommateur de votre méthode construit un objet valide avant d'appeler votre méthode (éliminant ainsi le besoin de la méthode de valider ces conditions).
- Transmettre des arguments individuels lorsqu'il est clair que la méthode a du sens et qu'elle n'a besoin que de certains éléments plutôt que de l'objet entier.
En utilisant une variation de votre exemple, une méthode de peinture qui prend deux coordonnées (X et Y) aurait avantage à prendre un objet Point plutôt que deux variables, X et Y.
Une méthode retrieveOrderByIdAndName serait mieux conçue en prenant le paramètre unique id et name plutôt qu'un objet conteneur.
S'il existait une méthode permettant de récupérer les commandes en fonction de nombreux critères différents, il serait plus judicieux de créer un retrieveOrderByCriteria et de lui transmettre une structure de critères.