1

我想从后台线程使用的代码EXC_BAD_ACCESS而[WKInterfaceTable setNumberOfRows:withRowType]

__block typeof(self.tableB) self_tableB = self.tableB; 
    [lwc setBaseControllerCallback:^(int ndx) { 
     __block typeof(ndx) ndx_t = ndx; 
     [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
      [self_tableB setNumberOfRows: 0 withRowType:TABLEELEMENT]; 
      [self_tableB setNumberOfRows: ndx_t withRowType:TABLEELEMENT]; 
     }]; 

    }]; 

其中

^(int ndx) { 
//... 
} 

是从后台线程调用块的这部分(更新表NSThread )和lwc - 是我的自定义后台线程类的一个实例。

要清除此方法被称为像: //代码内螺纹 如果(handlerBase_inner){ handlerBase_inner(NDX ++); }

所以,在 [self_tableB setNumberOfRows: ndx_t withRowType:TABLEELEMENT]; 我可以看到EXC_BAD_ACCESS。为什么?什么是

回答

1

我担心self_tableB。我不确定你想要一个强有力的引用它,人为地保持它活着可能会导致它有一个悬挂指针回到它的代表。

__block __weak typeof(self.tableB) self_tableB = self.tableB;

添加注释弱到威力的伎俩。