alloc,retain和copy之间有什么区别

The*_*mer 4 iphone memory-management objective-c

这似乎是一个简单的问题,但我并不知道何时应该使用alloc,retain或copy.

tas*_*oor 22

请仔细阅读这篇关于内存管理的长篇教程.可能需要一些时间来阅读整体,但它很好地解释了基本的东西.

编辑:关于复制 - 当您使用retain时,您只是增加对象的保留计数.但是当您使用副本时,会创建对象的单独副本(浅副本).单独表示它是一个保留计数为1的不同对象.

例如,

NSObject *obj1 = [[NSObject alloc] init];   // obj1 has retain count 1

// obj1 and obj2 both refer same object. now retain count = 2
// any change via obj1 will be seen by obj2 and vice versa, as they point same object
NSObject *obj2 = [obj1 retain];   

// obj3 is a separate copy of the object. its retain count is 1 just like newly allocated object
// change via obj3 will not affect obj1 or obj2 and vice versa as they are separate objects
NSObject *obj3 = [obj1 copy];