Ios4 alloc、copy和new之间有什么区别?

Ios4 alloc、copy和new之间有什么区别?,ios4,memory-management,Ios4,Memory Management,alloc、copy和new之间的实际区别是什么?assign和nonatomic属性又有什么区别。 alloc alloc是一个类选择器(例如,名为like的示例) 它返回NSObject*类型的未初始化的指针 Init 要完成初始化,必须在实例本身上调用适当的指定初始值设定项: [[NSObject alloc] init] 将返回可用的NSObject*指针 新的 新函数基本上执行alloc->init,但它是在类级别直接调用的: NSObject* aObj = [NSObj

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

  • alloc
alloc是一个类选择器(例如,名为like的示例)

它返回NSObject*类型的未初始化的指针

  • Init
要完成初始化,必须在实例本身上调用适当的指定初始值设定项:

[[NSObject alloc] init]
将返回可用的NSObject*指针

  • 新的
新函数基本上执行alloc->init,但它是在类级别直接调用的:

NSObject* aObj = [NSObject new]
NSObject* aObj = [[NSObject alloc] init]
它们是相似的

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

因此,如果不同线程不会同时更改属性,则可以安全地将其设置为非原子

  • 复制
“复制”属性表示在修改该属性时,例如:

aObj.copyProperty = otherValue
copyProperty变量将copyWithZone:信号发送到otherValue对象

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

基本上,copyProperty将占用与otherValue相同的内存空间

  • 分配
指定特性意味着执行以下操作时:

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

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

我希望这对你有帮助。欲了解更多信息,请阅读

aObj.prop = aProperty