alloc,copy和new之间的实际区别是什么,以及assign和nonatomic属性如何。
答案 0 :(得分:5)
alloc是一个类选择器(例如,用于举例)
[NSObject alloc]
它返回NSObject *类型的非初始化指针。
要完成初始化,您必须在实例本身上调用正确的指定初始值设定项:
[[NSObject alloc] init]
将返回一个可用的NSObject *指针。
新的基本上是一个alloc - > init除了在类级别直接调用之外:
NSObject* aObj = [NSObject new]
NSObject* aObj = [[NSObject alloc] init]
相似。
非原子属性意味着当写入属性时(在设置调用期间为ex)将不会对此属性合成的变量添加锁定(这意味着没有过多的时间消耗@synchronize)
因此,如果您的属性不会同时被不同的线程更改,您可以安全地将其设置为非原子。
复制属性意味着当您修改该属性时:
aObj.copyProperty = otherValue
copyProperty 变量会将copyWithZone:信号发送到 otherValue 对象。
换句话说,如果您的 copyProperty 符合 NSCopying 协议,它最终将具有与 otherValue 相同的属性,但会拥有它自己的地址和保留计数,因此位于内存的完全不同的部分,因为 otherValue 是。
基本上 copyProperty 将占用与 otherValue 一样多的内存空间。
分配属性意味着当你这样做时:
aObj.prop = aProperty
由属性 prop 合成的变量将直接分配给属性,这意味着它们将共享完全相同的地址并保留计数。
使用assign时没有占用额外的内存空间。
我希望这会对你有所帮助。有关详细信息,请阅读Apple Memory Management Documentation