当我调用`-copy`时,为什么不复制我的NSImage的名称属性?

时间:2015-11-16 16:17:15

标签: objective-c cocoa copy nsimage

我有NSArray("对象"),其中包含NSImage类型的对象

我发现当我尝试复制数组中的每个图像时,name上的NSImage属性不会被复制。

   for (NSObject* object in objects)
   {
      NSMenuItem* menuItem = nil;
      if ([object isKindOfClass:[NSImage class]])
      {
         NSImage* image = [object copy];
         //Breakpoint here

以下是^^

上方断点处的变量视图的屏幕截图

enter image description here

name属性怎么可能没被复制?

1 个答案:

答案 0 :(得分:2)

图像上的名称用作特殊注册机制,因此您可以稍后按名称查看图像。因此,每个名称只能有一个图像。如果更改图像上的名称,则会删除原始注册并添加新注册。如果图片已经具有您尝试设置的名称,则该图片会被拒绝。

有效地,您所看到的是尝试将图像名称重新注册到不同的图像。该图像可能是一个副本,因此您可能认为保留名称很好,但您不知道私有实现是什么,并且您也没有考虑潜在的可变子类。

因此,您无法在多个不同的图像中共享名称。如果您想要做类似的事情,那么您需要使用自定义方案/方法单独管理名称/标识符。