我正在尝试为我的视图创建自定义按钮.一切都很好,除了渲染我得到一个关于我的颜色抛出异常.我的班级有2种颜色属性:
@property (nonatomic, retain) UIColor* defaultBackground;
@property (nonatomic, retain) UIColor* clickedBackground;
Run Code Online (Sandbox Code Playgroud)
一个用于表示默认渲染颜色,另一个用于表示用户单击时的颜色.在我的initWithFrame方法中,我初始化颜色:
defaultBackground = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
clickedBackground = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0];
Run Code Online (Sandbox Code Playgroud)
这一切都很好,直到我得到它在获取CGColor时抛出异常的渲染:
if((self.state & UIControlStateHighlighted) == 0)
{
CGContextSaveGState(context);
CGContextSetFillColorWithColor(context, defaultBackground.CGColor); //Crashes on this line
...
Run Code Online (Sandbox Code Playgroud)
以下是我得到的例外情况:
2012-04-13 10:19:51.005 -[__NSMallocBlock__ CGColor]: unrecognized selector sent to instance 0x7d94d20
2012-04-13 10:19:51.072 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSMallocBlock__ CGColor]: unrecognized selector sent to instance 0x7d94d20'
Run Code Online (Sandbox Code Playgroud)
任何想法将不胜感激.
更改您的两行,initWithFrame:如下所示:
self.defaultBackground = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
self.clickedBackground = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0];
Run Code Online (Sandbox Code Playgroud)
问题是将自动释放的UIColor对象直接分配给ivar会导致指向已释放对象的悬空指针.另一种选择是:
defaultBackground = [[UIColor alloc] initWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
clickedBackground = [[UIColor alloc] initWithRed:0.5 green:0.5 blue:0.5 alpha:1.0];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3323 次 |
| 最近记录: |