我希望通过本研究了解CoreFoundation对象的内部结构。下面给出了来自CGColor的免费石英项目。的结构
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,并比较它们是否相等于对象;
因此,我们可以使用有关内容的引用之类的内容,并确保它们可以始终使用(当内存被释放时,推荐可能变得无效)。此外,当使用ID之类的一些数据而不是整个内容时,性能将得到优化。
这个nextID在苹果核心图形的CGColor中的真正意图是什么?是否因为以前的做法而不能完全放弃呢?
发布于 2013-02-17 00:43:56
id表示,nextID字段的作用有点像内容的摘要。它标识了对象的相同内容--在本例中是颜色。
对象,则不能具有与我们都知道的相同的引用。即使它们包含相同的数据,而且实际上是平等的。例如,黑色的RGB或黑色的BW。两者都是黑色的:D (只是一个例子!) --因此您需要比较它们的内容。
关于数字或日期,你可以找到.它们被称为标记数字和标记日期。
https://stackoverflow.com/questions/14783145
复制相似问题