NSPasteboard是否保留所有者对象?

时间:2011-02-07 11:47:21

标签: objective-c cocoa appkit nspasteboard

您可以像这样致电NSPasteboard

[pboard declareTypes:types owner:self];

这意味着粘贴板稍后会要求所有者根据需要提供类型的数据。然而,我无法从文档中找到(也许我错过了一些明显的流血事件),是owner是否被保留。

在实践中令我担心的是,如果所有者是引用,它可能会被解除分配,如果粘贴板然后尝试从中请求数据,则会导致崩溃。

注意:我应该澄清一点,我对此更感兴趣,以帮助追踪错误,而不是让我的应用程序依赖它。但我也希望澄清文档。

1 个答案:

答案 0 :(得分:11)

文档:

  

newOwner

     

负责写作的对象   数据到粘贴板,如果你没有,则为零   提供所有类型的数据   立即。如果指定newOwner   对象,它必须支持所有的   newTypes中声明的类型   参数,必须保持有效   只要数据得到承诺就可以了   纸板。

翻译:粘贴板可能会也可能不会保留所有者。它是否是一个你不应该依赖的实现细节。只要作为所有者,您有责任保留所有者。

文档所说的“保持有效”实际上指的是您可能懒得提供的代理内容。即如果用户要复制某些内容,则您不希望所有者对复制内容的表示发生更改,因为用户进行了进一步编辑并打算稍后粘贴。

文档没有说明所有者的保留/释放政策(也没有任何形式的一揽子规则声明)。应该澄清(rdar:// 8966209提交)。事实上,对保留/释放行为做出假设是危险的。