1
只是关于返回值的函数的最佳实践的一般问题。例如说我有以下功能(伪代码):不使用返回的函数值会影响内存吗?
- (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"];
}
}
只是为了释放内存更快?在下面的主函数中有一个autorelease池是否会影响内存?
- (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;
}
我只是想确保不使用返回的值不会对我的应用程序产生负面影响,而且,过度使用自动释放池确实没有。
感谢您的任何建议。
好的,非常感谢,我将在几个初始设置循环中测试自动释放池,以查看它是否对内存使用有重大影响。我猜自动释放池不能导致过度释放的对象?它只是作为一个较短的运行循环? –