2012-07-31 101 views
1

我有一个(保留的)UIImage属性,用于保存用户选择的图像。设置属性值时是否需要使用临时变量?

这是我目前的代码,当用户进行选择:

- (IBAction) selectImage1 { 
    UIImage *image = [UIImage imageNamed: @"image1-big.png"]; 
    self.bigImage = image; 
} 

但我不知道它是否可以省略使用临时变量方便的方法,并且只是这样做:

- (IBAction) selectImage1 { 
    self.bigImage = [UIImage imageNamed: @"image1-big.png"]; 
} 

如果第二种方法存在问题(我猜测可能与内存管理有关),有人可以解释吗?

谢谢!

回答

1

第二种方式非常好。行UIImage *image = [UIImage imageNamed: @"image1-big.png"];为您提供了一个自动发布的变量image。通过self.bigImage = image将它分配给你的伊娃尔呼吁bigImage的保留价值的setter方法。因此,self.bigImage = [UIImage imageNamed: @"image1-big.png"];行相当于更详细的方式。

1

您发布的两个片段之间在内存管理方面没有区别;除非你在第一个片段中的两行之间的保留数量非常具体。

在ARC环境中,局部变量将是一个'强'指针,但是当方法离开作用域时它会被释放。在第二个片段中,没有中间保留/释放指针,因此可能实际上稍微更高效。

我已经看到第一个片段的技术的地方是必要的,当你有一个弱指针(即弱@属性),其中设置self.foo = [UIView ...将立即允许它被释放。在这种情况下,最好是当你使用它使用一个局部变量来保持它的周围:

self.someWeakProperty = [UIView... 
[self addSubview:self.someWeakProperty]; // it's already nil!! 

UIView *someFoo = [UIView... 
[self addSubview:someFoo]; 
self.someWeakProperty = someFoo; 

与比较

相关问题