不使用返回的函数值是不是会影响内存?

Posted

技术标签:

【中文标题】不使用返回的函数值是不是会影响内存?【英文标题】:Is there a memory impact from not using returned function values?不使用返回的函数值是否会影响内存? 【发布时间】:2015-12-03 09:58:40 【问题描述】:

关于返回值的函数的最佳实践的一般问题。比如说我有以下函数(伪代码):

- (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;
        

我只是想确保不使用返回值不会对我的应用程序产生负面影响,并且过度使用自动释放池也不会。

感谢您的建议。

【问题讨论】:

【参考方案1】:

每次运行循环调用时,它都会创建一个自动释放池。因此,您所要做的就是在执行由运行循环引起的任何事情时不要分配过多的内存。例如,如果用户按下按钮,则处理此按钮的代码不应分配 100 MB 内存,即使自动释放也是如此。否则,自动发布的价格相当便宜。

【讨论】:

好的,谢谢你,将在我的一些初始设置循环中测试自动释放池,看看它是否对内存使用有重大影响。我猜自动释放池永远不会导致过度释放的对象?它只是作为一个较短的运行循环?

以上是关于不使用返回的函数值是不是会影响内存?的主要内容,如果未能解决你的问题,请参考以下文章

将引用作为函数返回值的格式好处和规则

Python__19--函数调用的参数传递与变量的作用域

开机弹出launcher:exe应用程序错误是怎么回事

调用函数时为啥形参的值不能传给实参

C语言函数返回值为 const 型 有啥意义

从函数返回的对象在不使用时是不是仍然创建?