这只是一个关于返回值的函数的最佳实践的一般问题。举个例子,我有以下功能(伪代码):
- (UIImageView *)createImageViewAndAddWithImageName:(NSString *)sName
{
UIImageView *iv = nil;
if (sName)
{
UIImage *image = [UIImage imageNamed:sName];
if (image)
{
iv = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[iv setImage:image];
[iv setContentMode:UIViewContentModeScaleAspectFit];
[self.view addSubview:iv];
}
}
return iv;
}
现在,在某些情况下,我想进行进一步的修改,如下所示:
UIImageView *iv = [self createImageViewAndAddWithImageName:@"Blah"];
[iv setAlpha:0.5f];
和其他时候一样,我只想添加一个图像:
[self createImageViewAndAddWithImageName:@"Blah"];
在第二个例子中,我假设内存将自动释放?在第二个例子中,如果这是在循环中运行的,那么使用下面这样的自动释放块是否有意义:
for (int i = 0; i < 100; i++)
{
@autoreleasepool {
[self createImageViewAndAddWithImageName:@"Blah"];
}
}
只是为了更快地释放记忆?在下面这样的主函数中有一个自动释放池会对内存产生影响吗?
- (UIImageView *)createImageViewAndAddWithImageName:(NSString *)sName
{
UIImageView *iv = nil;
@autoreleasepool {
if (sName)
{
UIImage *image = [UIImage imageNamed:sName];
if (image)
{
iv = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[iv setImage:image];
[iv setContentMode:UIViewContentModeScaleAspectFit];
[self.view addSubview:iv];
}
}
}
return iv;
}
我只想确保不使用返回值不会对我的应用程序产生负面影响,而过度使用自动释放池也不会。
谢谢你的建议。
每次运行循环调用时,都会创建一个自动释放池。因此,在执行由运行循环引起的任何操作时,您所要做的就是不要分配太多内存。例如,如果用户按下了一个按钮,那么处理这个问题的代码不应该分配100MB的内存,即使是自动释放的。否则,自动释放是相当便宜的。