【问题标题】:Does NSPasteboard retain owner objects?NSPasteboard 是否保留所有者对象?
【发布时间】:2011-02-07 11:47:21
【问题描述】:
您可以像这样拨打NSPasteboard:
[pboard declareTypes:types owner:self];
这意味着粘贴板稍后会要求所有者根据需要提供类型的数据。但是,我无法从文档中找到(也许我错过了一些明显的出血),是 owner 是否被保留。
实际上让我担心的是,如果所有者是 weak 引用,它可能会被释放,如果粘贴板随后尝试向其请求数据,则会导致崩溃。
注意:我可能应该澄清一下,我对此的兴趣更多是为了帮助追踪错误,而不是让我的应用依赖它。但我也希望澄清文档。
【问题讨论】:
标签:
objective-c
cocoa
appkit
nspasteboard
【解决方案1】:
文档:
新主人
负责写的对象
数据到粘贴板,或者 nil 如果你
提供所有类型的数据
立即地。如果您指定一个 newOwner
对象,它必须支持所有
在 newTypes 中声明的类型
参数并且必须保持有效 as
只要数据上承诺
粘贴板。
翻译:粘贴板可能会或可能不会保留所有者。它是否是您不应该依赖的实现细节。只要所有者担任所有者,您就有责任保留所有者。
文档所说的“保持有效”实际上是指您可能懒惰地提供的代理内容。 IE。如果用户要复制某些内容,您不希望所有者对所复制内容的表示发生变化,因为用户进行了进一步的编辑并打算稍后粘贴。
文档没有说明所有者的保留/释放政策(也没有任何形式的一揽子规则声明)。应该澄清(rdar://8966209 归档)。事实上,对保留/释放行为做出假设是危险的。