首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CGColorRef不透明类型对象的ID

CGColorRef不透明类型对象的ID
EN

Stack Overflow用户
提问于 2013-02-08 23:38:29
回答 1查看 375关注 0票数 2

我希望通过本研究了解CoreFoundation对象的内部结构。下面给出了来自CGColor的免费石英项目。的结构

代码语言:javascript
复制
typedef struct CGColor {
        CFRuntimeBase obj;

        CFTypeID nextID;
        CGColorSpaceRef colorSpace;
        CGPatternRef pattern;
        size_t numberOfComponents;
        CGFloat *components;
} *CGColorRef;

持有一个全局线程安全唯一值,该值将为创建的每个CGColor对象递增,并分配给nextID成员。只有无文档化的CGColorGetIdentifier()函数才返回此值。

我已经检查了CoreGraphics及其资源库。我发现只有ripc_GetColor (libRIP.A.dylib)函数调用CGColorGetIdentifier()函数,它似乎比较了一些颜色对的nextID值。

调用CGColorGetIdentifier堆栈;(希望有助于对nextID进行推断) 0 com.apple.CoreGraphics CGColorGetIdentifier +0 1 libRIP.A.dylib ripc_GetColor + 112 2 libRIP.A.dylib ripc_DrawGlyphs + 1740 3 com.apple.CoreGraphics CGContextDelegateDrawGlyphs + 108 4 com.apple.CoreGraphics drawGlyphs + 284 5 com.apple.CoreGraphics CGContextShowGlyphsWithAdvances + 208

CFEqual首先比较引用,如果它们不相等,则比较内容,因此比较引用是一种正确的方法。如果引用不被更改,创建和维护唯一的ID值将是一种浪费。

因此,可能需要一个唯一的ID,并比较它们是否相等于对象;

  1. 当存在线程安全问题时,比较ID可能比比较引用更好。引用点的内容(数据)可以在获得引用后(由另一个线程)更改。
  2. 或者,即使在同一个线程中,存储以供进一步使用的引用也会被某些其他不可预见的操作释放和/或修改。

因此,我们可以使用有关内容的引用之类的内容,并确保它们可以始终使用(当内存被释放时,推荐可能变得无效)。此外,当使用ID之类的一些数据而不是整个内容时,性能将得到优化。

这个nextID在苹果核心图形的CGColor中的真正意图是什么?是否因为以前的做法而不能完全放弃呢?

EN

回答 1

Stack Overflow用户

发布于 2013-02-17 00:43:56

id表示,nextID字段的作用有点像内容的摘要。它标识了对象的相同内容--在本例中是颜色。

对象,则不能具有与我们都知道的相同的引用。即使它们包含相同的数据,而且实际上是平等的。例如,黑色的RGB或黑色的BW。两者都是黑色的:D (只是一个例子!) --因此您需要比较它们的内容。

关于数字或日期,你可以找到.它们被称为标记数字和标记日期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14783145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档