使用CoreGraphics和线程问题绘制的自定义UITableViewCell

时间:2012-06-07 18:04:14

标签: ios uitableview thread-safety core-graphics

我正在使用核心图形绘制自定义UITableViewCell,基于Loren Brichter的Fast TableView示例。

我在自定义单元类中使用了一些iVars,我正在创建具有强引用(因此为ARC)的原子(多线程安全)。

现在,当我开始滚动tableView时,问题就开始了。 我在- (void)drawContentView:(CGRect)rect方法上随机崩溃,我正在进行子类化以执行自定义绘图。

问题是我在自定义单元类中使用的iVars已经被释放,内存现在由其他对象拥有,这当然会导致崩溃。

我尝试将@synchronized指令用于整个绘图代码,强制对绘图代码进行互斥锁定,但这并没有解决问题。

是否有其他人遇到此问题并知道问题的解决方案?

1 个答案:

答案 0 :(得分:2)

Atomic并不普遍意味着“多线程安全”。它只是意味着当你使用getter时,你将获得一个额外的retain / autorelease对(因此它不会在你的runloop期间消失),并且它将与setter @synchronized,这样你就可以如果设置并且发生碰撞,则得到半个对象。只有在使用getter和setter时才会这样。您不应该直接访问ivars。如果你是,那么原子意味着什么。

您可能还在主线程以外的线程上修改主UIKit上下文。你不能这样做。主要的UIKit上下文(递给drawRect:的上下文)仅在主线程上有效。