不使用返回的函数值是否会对内存产生影响



这只是一个关于返回值的函数的最佳实践的一般问题。举个例子,我有以下功能(伪代码):

- (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的内存,即使是自动释放的。否则,自动释放是相当便宜的。

相关内容

  • 没有找到相关文章

最新更新