关于返回值的函数的最佳实践的一般性问题。比方说,我有以下功能(伪代码):
- (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;
}
我只是想确保不使用返回值不会对我的应用程序产生负面影响,并且过度使用自动释放池也不会。
感谢您的任何建议。
答案 0 :(得分:0)
每次运行循环调用时,它都会创建一个自动释放池。因此,您所要做的就是在执行由运行循环引起的任何事情时不要分配太多内存。例如,如果用户按下按钮,则处理此代码的代码不应分配100 MB的内存,即使是自动释放也是如此。否则,自动释放相当便宜。