7

在标准的 Objective-C 手动内存管理下,在这个问题中建议释放使用初始化的 NSArray 的方式

imageArray  = [[NSArray alloc] initWithObjects:[UIImage imageNamed:@"1.png"], 
                        [UIImage imageNamed:@"2.png"],
                        nil];

是用

[imageArray release];
imageArray = nil;

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

4

2 回答 2

19

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

 imageArray = nil;

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

于 2011-08-26T18:15:59.757 回答
12

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

[self setImageArray:nil];

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

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

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

于 2011-08-26T16:57:25.127 回答