objective-c – 将自动释放的CGColor返回给ARC的转换方法

objective-c – 将自动释放的CGColor返回给ARC的转换方法,第1张

概述我正在将我的项目转换为使用ARC.我在NSColor上有一个类别,该方法返回一个自动释放的CGColor表示形式: @implementation NSColor (MyCategory)- (CGColorRef)CGColor{ NSColor *colorRGB = [self colorUsingColorSpaceName:NSCalibratedRGBColorSpace 我正在将我的项目转换为使用ARC.我在NScolor上有一个类别,该方法返回一个自动释放的CGcolor表示形式:

@implementation NScolor (Mycategory)- (CGcolorRef)CGcolor{    NScolor *colorRGB = [self colorUsingcolorSpacename:NSCalibratedRGBcolorSpace];    CGfloat components[4];    [colorRGB getRed:&components[0]               green:&components[1]                blue:&components[2]               Alpha:&components[3]];    CGcolorSpaceRef space = CGcolorSpaceCreateWithname(kCGcolorSpaceGenericRGB);    CGcolorRef thecolor = CGcolorCreate(space,components);    CGcolorSpaceRelease(space);    return (CGcolorRef)[(ID)thecolor autorelease];}@end

使用ARC的正确方法是什么?我不想返回一个保留的CGcolor.

XCode中的ARC转换器建议使用

return (CGcolorRef)[(__brIDge ID)thecolor autorelease];

但是会导致以下错误消息:

[rewriter] it is not safe to cast to ‘CGcolorRef’ the result of
‘autorelease’ message; a __brIDge cast may result in a pointer to a
destroyed object and a __brIDge_retained may leak the object

解决方法@H_419_33@ CGcolor是Core Foundation对象.您不应该尝试使用自动释放.相反,您应该重命名您的方法copyCGcolor并返回一个保留的对象.

自动发布是一个Objective-C概念.核心基金会不存在.

由于CGcolor没有免费连接到任何Objective-C类,尝试自动释放它是非常奇怪的(即使这可能工作).

几年后更新

现在,CoreFoundation级别有CFautorelease()(可从Mavericks和iOS 7获得).

总结

以上是内存溢出为你收集整理的objective-c – 将自动释放的CGColor返回给ARC的转换方法全部内容,希望文章能够帮你解决objective-c – 将自动释放的CGColor返回给ARC的转换方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1025484.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存