代码之家  ›  专栏  ›  技术社区  ›  Paul J. Lucas

NSPrintInfo的sharedPrintInfo究竟是如何共享的?

  •  2
  • Paul J. Lucas  · 技术社区  · 15 年前

    为应用程序自动创建共享的NSPrintInfo对象,默认情况下用于该应用程序的所有打印作业。

    sharedPrintInfo NSPrintInfo . 没有明确说明的是,如果您更改了该对象(例如,使用 setOrientation ),所说的更改是否“粘住”共享对象?一、 例如,您得到的对象是共享对象的单例还是新副本?

    setSharedPrintInfo 打印作业结束时。如果共享对象是单例对象,为什么要这样做?

    更新

    看来我的问题得更清楚些。从苹果的文档中,有一个 NSPrintInfo公司 那是“共享”的。如果没有,则默认情况下使用此“共享”实例 NSPrintInfo公司 对象在方法调用中显式使用。方法 共享打印信息

    现在还不清楚的是

    如果是克隆的,那么任何调用,比如 设置方向 将只影响克隆。如果我也想改变“shared”实例的方向,我必须调用 设置共享打印信息 提供经过修改的克隆作为参数。

    如果没有克隆,那么苹果的示例代码为什么显式调用 设置共享打印信息 NSPrintInfoObject 退回人 已影响“共享”实例。

    5 回复  |  直到 15 年前
        1
  •  2
  •   Peter Hosey    15 年前

    没有明确说明的是,如果您更改了该对象(例如,通过使用setOrientation),所说的更改是否与共享对象“一致”?一、 例如,您得到的对象是共享对象的单例还是新副本?

    void ;它们不会返回您设置了其属性的对象。NSPrintInfo的 setOrientation:

    返回应用了更改的接收方副本的方法在其名称中显式地这样说,例如, stringByAppendingString: (返回修改后的副本),与 appendString: (修改接收器)。

    设置方向:

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

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

    NSDocument的文档调用了一个特定的案例:您可以重写其 printInfo 方法来始终使用共享打印信息对象。我无法想象你为什么要这样做,但在这种情况下,共享打印信息对象是 真的吗 在所有打开的文档之间共享。

        2
  •  1
  •   Peter Hosey    15 年前

    在可可中,一种 sharedFoo

    这条规则同样适用于 defaultFoo [NSFileManager defaultManager] ). 别问我他们为什么叫这些方法 默认foo 共享oo .

    如果您确实需要自己的副本,许多类都允许您创建一个副本;NSPrintInfo就是一个明确允许这样做的示例。其他类(特别是共享面板,例如NSColorPanel)只存在于一个实例中。

        3
  •  0
  •   Alex    15 年前

    我不知道你的问题的答案,但这里有一个简单的测试:打电话 sharedPrintInfo 两次比较指针。如果它们是一样的,那么不,你得到的是一样的 NSPrintInfo 每次都要把东西拿回来。如果它们不同,那么每次你都会得到不同的物体。您可以在调试器中完成此操作,并在60秒内得到答案。

        4
  •  0
  •   nash George D Girton    15 年前

    这个 NSPrintInfo 文件说明如下,这似乎很清楚:

    还可以使用initWithDictionary:方法初始化此类的实例。

    setSharedPrintInfo: ?

    如果你使用 initWithDictionary: 然后可以将其存储为新的共享文件。但你不必这么做。

    Mac Dev Center, NSPrintInfo Class Reference

        5
  •  -2
  •   NSResponder    15 年前

    不是独生子女。有一个共享的NSPrintInfo对象,因为大多数应用程序只需要一个。如果适合您的情况,您还可以创建其他NSPrintInfo实例。