当ivar在哪里释放CGGradientRef

时间:2012-06-27 23:44:18

标签: iphone quartz-2d

我正在观看最后关于在Quartz中绘制的Apple视频。发言者说您应该将CGGradientRef存储在ivar中,以便系统可以处理缓存。所以我的第一个问题是,它是如何工作的?是否只是因为为该对象创建了一次渐变,然后再次创建渐变,除非再次创建该对象?

另外,你在哪里释放渐变?你是否像dealloc中的其他ivars一样释放它?

.h
@property (nonatomic, readonly) CGGradientRef gradient;

.m
- (CGGradientRef)gradient {
    if (NULL == _gradient) {
        CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
        _gradient = CGGradientCreateWithColors(rgb, (CFArrayRef)[NSArray arrayWithObjects:(id)[[UIColor colorWithRed:28./255 green:160./255 blue:255./255 alpha:1] CGColor], (id)[[UIColor colorWithRed:11./255 green:67./255 blue:107./255 alpha:1] CGColor], nil], nil);
        CGColorSpaceRelease(rgb);
    }
    return _gradient;
}

我在哪里发布CGGradientRef?谢谢!

1 个答案:

答案 0 :(得分:0)

通过简单的搜索,我发现了这个:

https://stackoverflow.com/a/8032905

在返回之前添加:

[(id)result autorelease];