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/