在ARC下,如何释放NSArray中的元素?

时间:2011-08-26 13:23:48

标签: objective-c ios automatic-ref-counting

在标准的Objective-C手动内存管理中,this question建议使用

初始化NSArray的方法
imageArray  = [[NSArray alloc] initWithObjects:[UIImage imageNamed:@"1.png"], 
                        [UIImage imageNamed:@"2.png"],
                        nil];

是使用

[imageArray release];
imageArray = nil;

鉴于我们不再可以在自动引用计数下使用-release,在ARC下发布此NSArray的建议方法是什么?

2 个答案:

答案 0 :(得分:19)

要使用ARC,您只需删除retainrelease消息就可以了。所以你摆脱了这样的数组:

 imageArray = nil;

这有效并且不会泄漏,因为在ARC下编译器会自动插入必要的retainrelease来电。

答案 1 :(得分:12)

如果imageArray是对象的ivar(可能不是一个安全的假设),你应该使用一个访问器将数组设置为nil;访问器将负责释放阵列及其所有成员:

[self setImageArray:nil];

如果您需要清理一个包含许多成员的数组,但在该ivar中保留一个有效的数组,以便其他方法可以安全地发送消息,您可以使用以下命令:

[self setImageArray:[[NSArray alloc] init]];

将使用新的空数组替换旧数组。