在对tableview进行刷新的时候 使用
@sychronized(self){
[self.tableView reloadData];
}
这样加锁对tableview多次刷新不会卡UI线程感觉很奇怪,为什么重复加锁,主线程不会被锁死,研究了@sychronized的实现原理后明白为什么了,
@sychronized 其实现利用NSRecursiveLock
NSRecursiveLock类定义的锁可以在同一线程多次获得,而不会造成死锁。一个递归锁会跟踪它被多少次成功获得了。每次成功的获得该锁都必须平衡调用锁住和解锁的操作。只有所有的锁住和解锁操作都平衡的时候,锁才真正被释放给其他线程获得。