Я пытаюсь собрать вместе и запустить список задач, собранных пользователем. Эти списки задач могут содержать сотни или тысячи элементов.Сколько накладных расходов вызывает вызов msg_send?
Из того, что я знаю, самый простой и очевидный способ будет построить массив, а затем перебирать их:
NSArray *arrayOfTasks = .... init and fill with thousands of tasks
for (id *eachTask in arrayOfTasks)
{
if (eachTask && [eachTask respondsToSelector:@selector(execute)]) [eachTask execute];
}
Для рабочего стола, это не может быть никаких проблем, но для Iphone или IPad , это может быть проблемой. Это хороший способ сделать это, или есть более быстрый способ сделать то же самое?
Причина, по которой я спрашиваю, сколько накладных расходов происходит в msg_send, заключается в том, что я мог бы также выполнять прямую реализацию C. Например, я мог бы собрать связанный список и использовать блок для обработки следующей задачи. Получу ли я что-нибудь от этого или это действительно больше проблем, чем его ценность?
Вам не нужно проверять, является ли 'eachTask' не равным нулю. 'responsesToSelector:' приведет к НЕТ, если 'eachTask' равен нулю или не отвечает на' execute'. – dreamlax
В любом случае вы не получите значение «nil» из NSArray. – kperryua
'id *' здесь не так – newacct