我想使用代码的这一部分从后台线程更新表
__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是我自定义后台线程类的一个实例。
要清除此方法,请调用: //线程内的代码 if(handlerBase_inner){ handlerBase_inner(NDX ++); }
所以,在
[self_tableB setNumberOfRows: ndx_t withRowType:TABLEELEMENT];
我可以看到EXC_BAD_ACCESS
。为什么?什么是
答案 0 :(得分:1)
我担心self_tableB。我不确定你是否想要强烈引用它,人为地保持它活着可能会导致它有一个悬挂指针回到它的代表。
__block __weak typeof(self.tableB) self_tableB = self.tableB;
添加弱注释可能会成功。