我有一个全局变量
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;
答案 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