Je tente de reconstituer et d'exécuter une liste de tâches mises en place par un utilisateur. Ces listes de tâches peuvent contenir des centaines ou des milliers d'éléments.Combien de frais généraux un appel msg_send doit-il supporter?
D'après ce que je sais, la façon la plus simple et la plus évidente serait de construire un tableau et itérer puis à travers eux:
NSArray *arrayOfTasks = .... init and fill with thousands of tasks
for (id *eachTask in arrayOfTasks)
{
if (eachTask && [eachTask respondsToSelector:@selector(execute)]) [eachTask execute];
}
Pour un ordinateur de bureau, cela peut être pas de problème, mais pour un iphone ou ipad , cela peut être un problème. Est-ce une bonne façon de procéder, ou existe-t-il un moyen plus rapide d'accomplir la même chose?
La raison pour laquelle je demande à quel point un msg_send survient est que je pourrais également faire une implémentation C directe. Par exemple, je pourrais créer une liste chaînée et utiliser un bloc pour gérer la tâche suivante. Vais-je gagner quelque chose ou est-ce vraiment plus de problèmes que de valeur?
Vous n'avez pas besoin de vérifier si 'eachTask' est non-nul. 'respondsToSelector:' aboutira à NO si 'eachTask' est nul ou ne répond pas' execute'. – dreamlax
De toute façon, vous n'obtiendrez pas la valeur 'nil' d'un NSArray. – kperryua
'id *' est faux ici – newacct