不使用返回的函数值是不是会影响内存?
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 内存,即使自动释放也是如此。否则,自动发布的价格相当便宜。
【讨论】:
好的,谢谢你,将在我的一些初始设置循环中测试自动释放池,看看它是否对内存使用有重大影响。我猜自动释放池永远不会导致过度释放的对象?它只是作为一个较短的运行循环?以上是关于不使用返回的函数值是不是会影响内存?的主要内容,如果未能解决你的问题,请参考以下文章