alloc、copy 和 new 之间的实际区别是什么,分配和非原子属性又如何。

最佳答案

  • 分配

  • alloc 是一个类选择器(例如,称为like)
    [NSObject alloc]
    

    它返回一个 未初始化的 NSObject* 类型的 指针。
  • 初始化

  • 要完成初始化,您必须在 实例 本身上调用适当的指定初始化程序:
    [[NSObject alloc] init]
    

    将返回一个可用的 NSObject* 指针。

  • new 基本上做了一个 alloc -> init ,除了它在类级别直接调用:
    NSObject* aObj = [NSObject new]
    NSObject* aObj = [[NSObject alloc] init]
    

    是相似的。
  • 非原子

  • 非原子属性意味着当属性将被写入时(例如在 set 调用期间) 不会在此属性合成的变量上添加 锁(这意味着不会消耗过多的时间@synchronize)。

    因此,如果您的属性不会同时被不同的线程更改,您可以安全地将其设置为 nonatomic。
  • 复制

  • 复制属性意味着当您修改该属性时:
    aObj.copyProperty = otherValue
    

    copyProperty 变量将向 otherValue 对象发送 copyWithZone: 信号。

    换句话说,如果您的 copyProperty 符合 NSCopying 协议(protocol),它最终将具有与 otherValue 相同的属性,但将拥有自己的地址和保留计数,因此与 otherValue 位于完全不同的内存部分。

    基本上 copyProperty 将占用与 otherValue 一样多的内存 空间。
  • 分配

  • 分配属性意味着当您执行以下操作时:
    aObj.prop = aProperty
    

    由属性 prop 合成的变量将直接分配给 aProperty 意味着它们将共享完全相同的 地址并保留计数

    使用assign 时不会占用额外的内存空间

    我希望这可以帮助你。有关更多信息,请阅读 Apple Memory Management Documentation

    关于ios4 - alloc ,copy 和 new 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6152700/

    10-12 21:57