【问题标题】:Objective-C - difference between alloc and allocFromZone? [duplicate]Objective-C - alloc 和 allocFromZone 之间的区别? [复制]
【发布时间】:2011-11-16 03:10:35
【问题描述】:

可能重复:
what is difference between alloc and allocWithZone:?

我读到一篇文章提到使用allocWithZone 通过使用更接近对象本身的内存位置来帮助提高性能。这是真的?是否建议使用allocWithZone 而不是alloc? alloc 和 allocWithZone 有什么区别?

证明的例子是:

- (id)init
{
   if (self = [super init])
   {
      _myString = [[NSString allocWithZone:[self zone] init]];
   }

   return self;
}

【问题讨论】:

    标签: objective-c alloc


    【解决方案1】:

    第一个 ARC 不允许在对象上调用 zone。由于所有事情都在朝着这个方向发展,这似乎是不使用 allocWithZone 的充分理由。

    我知道有一个很好的用途是使用allocWithZone,符合NSCopying

    @protocol NSCopying
    - (id)copyWithZone:(NSZone *)zone;
    @end
    

    虽然您可以完全忽略 zone 参数,但我喜欢这样做:

    -(id)copyWithZone:(NSZone *)zone{
        SampleClass *copy = [[SampleClass allocWithZone:zone] init];
        copy->_myString = [_myString copyWithZone:zone];
        return copy;
    }
    

    除此之外,我认为除了previous question 发布的内容外,没有什么可说的了。

    【讨论】:

      【解决方案2】:

      直接来自the horse's mouth

      没有必要再使用 NSZone 了——它们无论如何都会被现代的 Objective-C 运行时所忽略

      (来自 ARC 发行说明,供在 Apple 再次破坏文档结构后阅读此内容的任何人使用。)

      记忆区曾经有些用处,但 Cocoa 已经彻底远离了它们。 NSZone 就像一条退化的尾巴,ARC 和 libauto GC 都将其切断。正如 Apple 工程师 Bill Bumgarner 在 cmets 中关于 bryanmac 的欺骗所指出的那样,它们只是笨拙且不习惯在 Cocoa 中发挥很大的作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-10
        • 1970-01-01
        相关资源
        最近更新 更多