bugprone-no-escape

查找带有 noescape 属性的指针,这些指针被异步执行的代码块捕获。在 dispatch_async()dispatch_after() 中的代码块参数保证会逃逸,因此如果带有 noescape 属性的指针被其中一个代码块捕获,则这是一个错误。

以下是一个使用 noescape 属性的无效示例。

void foo(__attribute__((noescape)) int *p) {
  dispatch_async(queue, ^{
    *p = 123;
  });
});