gpt4 book ai didi

objective-c - NSPrintInfo 共享 PrintInfo 到底是如何共享的?

转载 作者:行者123 更新时间:2023-12-03 16:45:02 43 4
gpt4 key购买 nike

Apple 的 NSPrintInfo 文档部分说明:

A shared NSPrintInfo object is automatically created for an application and is used by default for all printing jobs for that application.

方法sharedPrintInfo返回共享的NSPrintInfo。没有明确说明的是,如果您更改该对象(例如,通过使用 setOrientation ),所述更改是否会“粘在”共享对象上?即,您返回的对象是单例对象还是共享对象的新副本?

我问这个问题的一个原因是,我在 Apple 的一些示例代码中看到,他们在打印作业结束时显式调用 setSharedPrintInfo。如果共享对象是单例,他们为什么要这样做?

更新

看来我的问题必须更清楚了。从 Apple 的文档中可以看出,存在一个“共享”实例 NSPrintInfo。当方法调用中没有显式使用 NSPrintInfo 对象时,默认使用此“共享”实例。 sharedPrintInfo 方法返回指向此“共享”实例的指针。

不清楚的是 sharedPrintInfo 是否克隆“共享”实例并返回指向该实例的指针,或者只是返回指向现有实例的指针。

如果是克隆,则任何调用(例如对 setOrientation 的调用)都只会影响克隆。如果我还想更改“共享”实例的方向,我必须调用 setSharedPrintInfo 提供更改后的克隆作为参数。

如果没有克隆,则不清楚为什么 Apple 的示例代码显式调用 setSharedPrintInfo,因为所有方法调用都会更改 sharedPrintInfo 返回的 NSPrintInfoObject 的状态code> 已经影响了“共享”实例。

最佳答案

What's not explicitly stated is if you alter that object (e.g., by using setOrientation), do said alterations "stick" with the shared object? I.e., is the object you get back a singleton or a fresh copy of the shared object?

Setter 通常返回 void;它们不会返回您设置其属性的对象。 NSPrintInfo 的 setOrientation: 方法就是一个示例。

返回已应用更改的接收者副本的方法在其名称中明确说明 - 例如,stringByAppendingString:(返回修改后的副本),而不是 appendString:(修改接收者)。

因此 NSPrintInfo 的 setter 仅影响您向其发送这些消息的对象。如果您发送setOrientation:到共享打印信息,您就修改了该对象;您没有创建新的打印信息。

好的,现在回答你的实际问题。

如果您查看 NSDocument,您会发现每个文档都可以有自己的打印信息。当用户进入页面设置时,他们在文档窗口上的工作表中进行操作,并且他们的更改仅影响该文档 - 这只有通过为每个文档提供自己的打印信息才能实现。如果您的应用程序不是基于文档的,那么它可能是一个单窗口应用程序,整个过程的一个打印信息就可以了。

NSDocument 的文档指出了一种特定情况:您可以在 NSDocument 子类中重写其 printInfo 方法,以始终使用共享打印信息对象。我无法想象您为什么要这样做,但在这种情况下,共享打印信息对象实际上是在所有打开的文档之间共享的。

关于objective-c - NSPrintInfo 共享 PrintInfo 到底是如何共享的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1723980/

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