UIColor应用程序崩溃

时间:2010-06-08 06:39:40

标签: objective-c iphone

我有一个全局变量

UIColor *textColor;

我通过代码

更新此变量
textColor = [UIColor colorWithRed:fr green:fg blue:fb alpha:1.0];

然后将此颜色分配给Label,就像这样

myLabel.textColor = textColor;

它只工作一次,当我再次使用更新的值调用并分配标签新值应用程序崩溃...

textColor = [UIColor colorWithRed:fr green:fg blue:fb alpha:1.0];
myLabel.textColor = textColor;

2 个答案:

答案 0 :(得分:3)

首先,你几乎不应该在Objective-C中使用全局变量。当你获得更多代码时,它们变得非常难看。

话虽如此,在创建它以解决崩溃后保留它,并在为其分配新内容之前释放它。您看到自动释放池为您释放颜色,因为在您的功能退出后没有任何东西拥有它。

答案 1 :(得分:0)

我意识到这不是一个答案,但我认为它给了一个更详细的问题 - 我相信其他人已经发生过这种情况。

使用colorWithRed时我有类似的事情,但是没有发生,例如[UIColor redColor]

我不知道

之间有什么区别
UIColor* mycolor = [UIColor redColor] 

UIColor* mycolor = [UIColor colorWithRed: 1.0 green:0.0 blue:0.0 alpha:1.0];
但肯定有区别。

我的调用堆栈显示我的UIDeviceRGBColor被丢弃,在那个时候没有与该设备交互的类。

#0  0x91d95156 in __kill
#1  0x91d95148 in kill$UNIX2003
#2  0x91e27899 in raise
#3  0x91e3d9b8 in abort
#4  0x91e2c160 in szone_error
#5  0x91e2c25d in free_tiny_botch
#6  0x00ccbc63 in _CFRelease
#7  0x004231bc in -[UIDeviceRGBColor dealloc]
#8  0x00007774 in -[RotoCircle setCircleLine:] at RotoCircle.m:16
#9  0x000068bd in -[DrawableView setFillPattern:oneColor:otherColor:forObjectList:] at DrawableView.m:328
#10 0x00006ba3 in -[DrawableView taps3] at DrawableView.m:360