代码之家  ›  专栏  ›  技术社区  ›  Steve Madsen

NSCopyObject被认为有害?

  •  4
  • Steve Madsen  · 技术社区  · 14 年前

    在Xcode文档中 NSCopyObject 特别注意事项一节指出:

    此功能很危险,很难正确使用。它被用作 copyWithZone: 任何可以被子类化的类,都是非常容易出错的。在GC或使用Objective-C2.0时,区域完全被忽略。

    在Mac OS X 10.6之后,此函数可能会被弃用。

    为什么很难正确使用?它执行浅(逐位)复制。不会复制或保留对象。文件对此非常清楚。

    如果我没有遗漏其他原因,执行对象的浅层复制的首选方案是什么?

    有充分的理由希望执行浅层复制。一个例子:一个类可能有许多实例变量,其中大多数是原语类型(integer、float)或故意不保留以避免保留循环的对象(委托)。使用 将所有这些复制到一行很好的、自文档化的代码中。任何需要引用计数的剩余ivar都可以单独保留或复制。

    另一种方法是使用指针语法为新对象赋值( newObject->ivar = ivar )或者创建一个具有大量参数的init方法(每个ivar复制一个参数)。后者给我的印象特别难看,但我想它不需要在头球和暴露在世界上。

    2 回复  |  直到 5 年前
        1
  •  1
  •   Yuji    14 年前

    推荐文章