NSarray发布

时间:2010-02-21 12:50:22

标签: cocoa memory-management nsarray

如果我声明NSArrayalloc&单retain然后我应该释放NSArray对象两次(即[arrayObject release] 2次)?

4 个答案:

答案 0 :(得分:7)

如果您在同一行创建NSArray allocretain,那么您可能做错了。

对象为alloc,保留计数为+1,因此无需在其上调用retain

直接回答你的问题;是的,你必须release两次。一次是因为你创建了这个对象,因为你retain编辑了它。但我会质疑为什么你需要在一开始就保留一段额外的时间。

答案 1 :(得分:2)

您无需保留它。在分配/ init时,您已经保留 - 或取得 - 对象的所有权。重温Memory Management Programming Guide for Cocoa

答案 2 :(得分:0)

不,你必须释放每个alloc的对象并保留每个。 (而且你无论如何都不能分配一个以上的对象。)

答案 3 :(得分:0)

如果你这样做

NSArray* arrayObject;
arrayObject = [[NSArray alloc] init];
arrayObject = [[NSArray alloc] init];
...

然后它只是错误的代码。后者的任务将涵盖旧的,导致泄漏。使用2个对象,然后释放每个

NSArray* arrayObject1, arrayObject2;
arrayObject1 = [[NSArray alloc] init];
arrayObject2 = [[NSArray alloc] init];
...
[arrayObject1 release];
[arrayObject2 release];

或在之前释放对象

NSArray* arrayObject;
arrayObject = [[NSArray alloc] init];
...
[arrayObject release];
arrayObject = [[NSArray alloc] init];
...
[arrayObject release];