我的iOS App中有一个UIControl
子类(我使用的是iOS 4.3),子类的一部分是一个名为“setButtonColor:(UIColor)bc”的方法。每当我从我的代码中调用这个方法时,它工作正常......但只有当我使用内置颜色时才会使用greenColor或redColor。如果我使用“colorWithRed:green:blue:alpha
”来制作我自己的颜色,它会在控制台中使用此消息崩溃:
-[UIDeviceRGBColor set]: message sent to deallocated instance 0x4e61560
这是setButtonColor:方法:
-(void)setButtonColor:(UIColor *)bc{
buttonColor = bc;
[self setNeedsDisplay];
}
如果删除setNeedsDisplay
,它不会崩溃,但按钮颜色不会像预期的那样改变。如果有人知道为什么会这样,我会非常感激,如果你需要更多细节,请问。
提前致谢,
thekmc
答案 0 :(得分:3)
我假设您没有使用ARC。
在不保留的情况下设置buttonColor = bc
时,当当前autorelease
池刷新时,buttonColor将成为悬空指针(假设它未在其他地方保留)。
[self setNeedsDisplay]将调用drawRect:稍后,此时,buttonColor可能已经被解除分配,这会在引用它时使应用程序崩溃。
静态颜色不会崩溃的原因可能是因为UIKit保留了这些颜色的所有权以供以后重复使用。
将buttonColor设置为bc后保留,保留所有权,使其对drawRect仍然有效:。