objective-c - CTLineRef 是否拥有属性字符串?

标签 objective-c cocoa core-graphics ctlineref

我刚刚开始在苹果上进行 GUI 编程(到目前为止,框架看起来不错,但我发现文档的信息量远不如其他文档...Qt、.Net、java 等)。

我遇到的问题之一是了解谁拥有什么。例如,如果我调用 CTLineRefCreateWithAttributedString,生成的 CTLineRef 是否拥有属性字符串?如果属性字符串是可变的并且我更改了它怎么办?这会弄乱 CTLineRef 吗?

该文档缺乏启发性。

CTLineRef 的引用没有提供有关该主题的信息: https://developer.apple.com/library/mac/#documentation/Carbon/Reference/CTLineRef/Reference/reference.html

一些示例不会释放该字符串,我将其视为它被拥有的指示符: https://developer.apple.com/library/mac/#documentation/StringsTextFonts/Conceptual/CoreText_Programming/Operations/Operations.html

一些示例确实释放了该字符串,这表明它没有释放: https://developer.apple.com/library/mac/#samplecode/CoreAnimationText/Listings/VectorTextLayer_m.html

(这个不是苹果,但他似乎更了解他们我) http://www.cocoanetics.com/2011/01/befriending-core-text/

那么字符串是否被复制?如果我使用 CFMutableAttributedStringRef 我可以更改它吗(我假设我之后必须创建一个新的 CTLineRef)?

这是一个具体的例子,但这是我在无数地方遇到的问题。任何帮助将非常感激。我觉得一定有一些规则来管理这些事情,但我一点也不知道这些规则是什么,也不知道在哪里可以找到它们。

最佳答案

您寻求的管理规则可以在 Core Foundation Memory Management Guide 中找到。 。需要注意的要点是,您实际上不需要知道 CTLineRef 是否拥有属性字符串。任何对象都可以有多个所有者。您需要担心的只是是否拥有字符串,以及最适合放弃所有权的地方在哪里。如果您在创建 CTLineRef 后完成了它,则可以随意释放它。

将其余部分视为 CTLineRef 的实现细节。如果 CTLineRef 遵循该文档中规定的规则(确实如此)并且需要保留属性字符串,那么它将在内部保留它。它也有可能在内部制作一个副本(这很可能),因此不再关心原始版本。也许它将字符串发送到火星上的服务器,并在以后每次需要时查询它(可能性较小)。重要的一点是,无论它做什么,如果您不再需要它,您可以安全地释放该字符串。

至于可变性和复制行为,那就有点模糊了。你是对的,文档没有明确说明该行为。文档明确指出该对象是不可变的。这意味着几乎可以保证它实际上会复制输入字符串(或将其内容解析为其他内容)。人们普遍理解的最佳实践是,对象应该始终复制输入字符串,原因正是您提到的——实现无法知道提供的字符串是否实际上是可变的。为了使实现保持稳健,它需要确保其内部状态不能被外部世界改变。保证这一点的唯一方法是复制字符串。即使对于可变类也是如此,但 CTLineRef 则不然。

关于objective-c - CTLineRef 是否拥有属性字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11799269/

相关文章:

ios - 我想在 iOS 5.x 中隐藏一个 Button 但在 iOS 6.x 中不

objective-c - 你如何在 objective-c 中将函数名 "speak"给另一个程序员

ios - HealthKit - 显示 sleep

ios - 为什么 CGContextSetStrokeColorWithColor 不将文本颜色设置为黑色?

objective-c - 使用 nsscanner 类扫描字符串

cocoa - 在 Cocoa 中显示字符串

swift - 在 Swift cocoa 应用程序中使用 Quick Look 来预览音频文件

objective-c - 停止通过 NSView 进行透明绘制

iphone - CorePlot ScatterPlot 滚动性能 iPhone4

ios - 如何将不均匀的 UIImage 扭曲成一定比例