我有一个方法返回CGColorCreate方法创建的CGColorRef实例。我需要从这个方法自动释放颜色返回。有谁知道怎么做?
//red,green,blue are from 0-255 range
+(CGColorRef) getColorFromRed:(int)red Green:(int)green Blue:(int)blue Alpha:(int)alpha
{
CGFloat r = (CGFloat) red/255.0;
CGFloat g = (CGFloat) green/255.0;
CGFloat b = (CGFloat) blue/255.0;
CGFloat a = (CGFloat) alpha/255.0;
CGFloat components[4] = {r,g,b,a};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGColorRef color = CGColorCreate(colorSpace, components);
CGColorSpaceRelease(colorSpace);
//CGColorRelease(color);
// I need to auto release the color before returning from this.
return color;
}
答案 0 :(得分:13)
你不能直接,正如mvds所说。另外UIColor
和CGColorRef
不免工具桥接 - 为什么转换器起作用呢?但是(虽然我不建议它 - 使用UIColor
代替!)有一个技巧:
创建一个自动释放的 UIColor对象并返回它的CGColor。像这样:
return [UIColor colorWith... ].CGColor;
这将返回绑定到CGColorRef
的常规UIColor
对象。这意味着如果UIColor
在自动释放循环中被释放,它的CGColorRef
也将被释放 - 除非它被使用CGRetain(...)
保留在其他地方,这是你的调用者方法应该已经完成,如果它想保持颜色。因此CGColorRef
是伪自动释放的......
仍然:我会不建议这样做。直接使用UIColor!
答案 1 :(得分:6)
你可以这样做:
CGColorRef color = (CGColorRef)[(id)CGColorCreate(colorSpace, components) autorelease];
答案 2 :(得分:3)
你做不到。自动释放池适用于侦听release
消息的对象,CGColorRef
不是这样的对象。
您可以通过执行
重写事物以返回UIColor
UIColor *ret = [UIColor colorWithCGColor:color]; // ret will be autoreleased
CGColorRelease(color);
return ret;
答案 3 :(得分:-3)
使用免费电话:
return [(UIColor *)color autorelease];
或者您可以使用+ (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha
方法,然后执行return [myColor CGColor];