【问题标题】:iPhone : (id)copyWithZone:(NSZone *)zone : what is "zone" for?iPhone : (id)copyWithZone:(NSZone *)zone : 什么是“区域”?
【发布时间】:2011-01-08 00:24:37
【问题描述】:

当在类中实现这种 NSCopying 方法以启用复制时,区域参数的用途是什么? 如果我设置一个新对象,我不需要用 allocWithZone 分配它,因为一个 alloc 就足够了......我很困惑......

【问题讨论】:

    标签: iphone nscopying copywithzone


    【解决方案1】:

    这是旧时代的遗物,我们有多个“区域”要分配。如今,所有应用程序只有一个区域进行所有分配,但 NSZone 类仍然存在,而且太多了编写代码以依赖 +allocWithZone: 作为进行更改的基本分配方法。

    简而言之,您可以完全忽略NSZone 结构,而关心+allocWithZone: 的唯一原因是您是否需要覆盖它。与-copyWithZone: 类似,您可以忽略该区域。如果您愿意,可以在同一区域通过时致电+allocWithZone:,但不会有任何区别。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 至少在我看来,文档没有以任何有用的方式解释它是什么:“为新实例分配的内存区域”充其量是模糊的。
      • 它没有解释,因为它不再有用了。在过去,你经常有不同的内存区域,或者你可以用来存储东西的“区域”,而区域的东西就是这样。如今,现代操作系统让您将所有东西都视为任何东西都可以访问的大池虽然理论上仍然有区域的用途(即安全映射内存空间,自定义内存映射文件恶作剧等。但我不确定如果您甚至可以依赖区域甚至不再工作。
      猜你喜欢
      • 1970-01-01
      • 2012-08-16
      • 2012-10-06
      • 2021-01-03
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      相关资源
      最近更新 更多