我意识到我在排队很多调用空方法的 block 。在调试器中,当所有 block 都为空时,似乎发生了很多事情。
空 block 对性能有实际影响吗?
最佳答案
开销应该可以忽略不计:您可以使用 Instruments 和一个简单的程序来检查这一点:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
void (^b)(void) = ^{ };
double d = 2.0;
for(int i = 0; i < 10000000; ++i) {
dispatch_sync(q, b);
d = d * 1.5 - 1.0;
}
NSLog(@"d = %.3f", d);
}
return 0;
}
正如您在 Instruments 堆栈跟踪中看到的那样,调用需要 40 毫秒才能对一个空 block 进行 1000 万次同步调用。开销不大。
关于ios - 在队列上运行一个空 block 的开销是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48497146/