2012-07-31 86 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; 

與比較

相關問題