如果我声明NSArray
与alloc
&单retain
然后我应该释放NSArray
对象两次(即[arrayObject release]
2次)?
答案 0 :(得分:7)
如果您在同一行创建NSArray
alloc
和retain
,那么您可能做错了。
对象为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];