我正在使用核心图形绘制自定义UITableViewCell,基于Loren Brichter的Fast TableView示例。
我在自定义单元类中使用了一些iVars,我正在创建具有强引用(因此为ARC)的原子(多线程安全)。
现在,当我开始滚动tableView时,问题就开始了。
我在- (void)drawContentView:(CGRect)rect
方法上随机崩溃,我正在进行子类化以执行自定义绘图。
问题是我在自定义单元类中使用的iVars已经被释放,内存现在由其他对象拥有,这当然会导致崩溃。
我尝试将@synchronized指令用于整个绘图代码,强制对绘图代码进行互斥锁定,但这并没有解决问题。
是否有其他人遇到此问题并知道问题的解决方案?
答案 0 :(得分:2)
Atomic并不普遍意味着“多线程安全”。它只是意味着当你使用getter时,你将获得一个额外的retain / autorelease对(因此它不会在你的runloop期间消失),并且它将与setter @synchronized,这样你就可以如果设置并且发生碰撞,则得到半个对象。只有在使用getter和setter时才会这样。您不应该直接访问ivars。如果你是,那么原子意味着什么。
您可能还在主线程以外的线程上修改主UIKit上下文。你不能这样做。主要的UIKit上下文(递给drawRect:
的上下文)仅在主线程上有效。