【问题标题】:NSImage size problemNSImage 大小问题
【发布时间】:2011-07-01 14:37:42
【问题描述】:

我在两个不同的控制器中使用相同的图像资源。在两个控制器中,图像以不同的尺寸显示,问题是一旦图像以比原始尺寸更小的尺寸显示,下次我通过[NSImage imageNamed:@"resource.png"] 获取图像时,图像尺寸将设置为上次使用的尺寸.我尝试通过调用 NSImage 上的 recache 方法,还尝试将缓存模式设置为任何可能的值,但它不起作用。

有什么想法吗?

【问题讨论】:

    标签: objective-c macos nsimage


    【解决方案1】:

    您不应该修改从imageNamed: 获得的NSImage 实例。返回的实例与其他客户端共享,因此不应更改。

    如果你必须在图片上setSize:,只需复制并使用那个:

    NSImage *image = [[[NSImage imageNamed:@"foo.png"] copy] autorelease];
    [image setSize:(NSSize){128, 128}];
    

    【讨论】:

      【解决方案2】:

      事情是这样的

      [NSImage imageNamed]
      

      正如你提到的在缓存中,只要它在缓存中,它就会返回缓存的图像,所以你需要做的是首先释放以前的引用或使用对象的 setName 方法并将其设置为 nil。这是文档参考:

      在某些情况下,NSImage 类可能会缓存对返回的图像对象的引用以提高性能。但是,该类仅在对象存在时才保留缓存的对象。如果图像对象随后被释放,要么是因为它的保留计数为 0,要么在垃圾收集应用程序中的任何地方都没有引用它,那么该对象可能会从缓存中悄悄地删除。因此,如果您打算保留返回的图像对象,则必须像保留任何 Cocoa 对象一样保留它。 您可以通过调用对象的 setName: 方法并为图像名称传递 nil 来显式地从缓存中清除图像对象。

      【讨论】:

        猜你喜欢
        • 2018-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多