ios4 - alloc、copy 和 new 有什么区别?

标签 ios4 memory-management

alloc、copy 和 new 之间的实际区别是什么,以及 assign 和 nonatomic 属性有什么区别。

最佳答案

  • 分配

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

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

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

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

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

    是相似的。
  • 非原子

  • 非原子属性意味着何时写入属性(例如在 set 调用期间)不会加锁在此属性合成的变量上(这意味着不会浪费时间@synchronize)。

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

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

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

    换句话说,如果您的 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/

    相关文章:

    c# - 如何确保在资源上使用 using 关键字

    xcode - 为什么音频在模拟器中有效,而在我的 iPad 上无效?

    涉及 vector 的C++内存分配问题

    c++ - C++ 分配器的 std::align_val_t 的有效对齐值是多少?

    java - 在分配大量字符串数据的应用程序中优化字符串数据的最佳方法

    java - 如何获取 ConcurrentHashMap 的最新 View ?

    iphone - shopkick 应用程序 UI 小部件

    iphone - 我什么时候使用initWithCoder : method?

    iphone - 此应用程序使用什么跳板类型的 UI 组件?

    iphone - iOS 核心数据 - 插入前如何检查