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

时间:2010-11-03 08:58:07

标签: iphone objective-c memory-management

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

2 个答案:

答案 0 :(得分:22)

请查看有关内存管理的this长篇教程。可能需要一些时间来阅读整体,但它很好地解释了基本的东西。

编辑:关于副本 - 当您使用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];

答案 1 :(得分:4)

Alloc :当你需要进行内存分配时(你想要创建一个对象,你需要为它分配内存空间)

每个对象都有一个保留计数,表示该对象拥有所有权的对象数。它通过 alloc copy 自动完成(复制意味着您需要该对象的副本)。但您也可以使用保留关键字。

当retain count == 0时,将调用对象 dealloc 方法并释放该对象中的所有分配。

我希望它足够清楚。 如果您需要更多信息:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html