gpt4 book ai didi

ios - CGColorRef 不透明类型的对象的 ID

转载 作者:行者123 更新时间:2023-12-01 16:52:08 25 4
gpt4 key购买 nike

我希望通过这项研究了解 CoreFoundation 对象的内部结构。
下面给出 free quartz project. 中 CGColor 的结构

typedef struct CGColor {
CFRuntimeBase obj;

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

保持全局线程安全的唯一值,该值随着创建并分配给 nextID 成员的每个 CGColor 对象而递增。只有未记录的 CGColorGetIdentifier() 函数返回此值。

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

Call stack for CGColorGetIdentifier;(with hope of helping to make inferences about 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 可能优于比较引用。获取引用后,引用指向的内容(数据)可能会在您身后(由另一个线程)更改。
  • 或者,即使在同一个线程中,为了进一步使用而存储的引用也会被一些其他不可预见的 Action 释放和/或修改。

  • 所以,我们可以使用一些关于内容的引用,并确保它们可以一直使用(释放内存时引用可能变得无效)。此外,当使用一些数据(如 ID)而不是整个内容时,性能将得到优化。

    Apple Core Graphics 的 CGColor 中这个 nextID 的真正意图是/可能是什么?它是从以前的方法遗留下来的,所以不能完全放弃吗?

    最佳答案

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

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

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

    关于ios - CGColorRef 不透明类型的对象的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14783145/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com