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