msg_send调用会产生多少开销?

pxl*_*pxl 1 cocoa objective-c objective-c-blocks

我正在尝试拼凑并运行用户组合的任务列表.这些任务列表可以是数百或数千个项目.

据我所知,最简单和最明显的方法是构建一个数组,然后迭代它们:

NSArray *arrayOfTasks = .... init and fill with thousands of tasks

for (id *eachTask in arrayOfTasks)
{
  if ( eachTask && [eachTask respondsToSelector:@selector(execute)] ) [eachTask execute];
}
Run Code Online (Sandbox Code Playgroud)

对于台式机,这可能没问题,但对于iphone或ipad,这可能是个问题.这是一个很好的方法,还是有更快的方法来完成同样的事情?

我之所以要问msg_send发生了多少开销,我也可以做一个直接的C实现.例如,我可以将链接列表组合在一起并使用块来处理下一个任务.我会从中获得任何东西,还是比它的价值更麻烦?

ryn*_*rtn 7

我假设你在谈论objc_msgSend,在这种情况下,Bill Bumgarner有一个非常值得阅读的优秀 4部分系列.

但总的来说,我建议只使用Obj-C.这就是iDevices使用的所有应用程序,包括Apple,以及数百项不会杀死该设备.