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/