0

我正在观看上次有关使用 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?谢谢!

4

1 回答 1

0

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

https://stackoverflow.com/a/8032905

在返回之前添加:

[(id)result autorelease];
于 2012-06-28T08:33:43.733 回答