2

我有一些關於使用ARC進行內存管理的一般性初學者問題。我在我的應用中遇到了一些性能問題 - 無論是在我的設備還是在模擬器上。性能問題僅在我以「視網膜」模式運行模擬器時出現,因此我認爲我必須有「內存」問題。當我在我的設備上測試應用程序時,我還在我的日誌中看到「收到內存警告」。使用ARC進行內存管理 - 性能問題

首先,當我創建UIImages在子視圖中使用時,我應該將該圖像設置爲零後,我已將其分配給子視圖?例如:

UIImage * image = [UIImage imageNamed:@"Image.png"]; 
UIImageView * imageView = [[UIImageView alloc] initWithImage:image]; 
[self.view addSubview:imageView]; 
// Should I set image && imageView to nil here? 

這是否也適用於其他局部變量和/或實例變量?

二,什麼是正確的ARC的方法來創建實例變量,我目前使用,

UiView * view; 

// And implement it in @implementation 
view = [[UIView alloc] initWithFrame:frame]; 

任何指導和提示,將不勝感激。良好ARC資源的鏈接也會很好。

回答

4

您的代碼沒問題。這裏的內存管理沒有問題。唯一可能導致問題的是[UIImage imageNamed:],因爲它會兌現加載的圖像。嘗試使用[[UIImage alloc] initWithContentsOfFile:]代替。

您可以找到有關ARC here

+0

感謝您的回答。我認爲我已經將性能問題歸功於我處理旋轉的方式。我當前的循環代碼看起來像變瘦:'self.pageView.transform = CGAffineTransformMakeRotation(M_PI *(-90)/ 180.0); self.pageView.transform = CGAffineTransformScale(self.pageView.transform,0.8375,0.8375); self.view.bounds = CGRectMake(-75.7,73.7,480.0f,268.0f);'當我評論這些線條時,表現沒問題。想想我會爲橫向和縱向創建兩個單獨的視圖,看看是否有幫助。謝謝。 – Anders

2

的兩個,你必須是精細的ARC相關的問題的好文章。你不需要手動設置任何變量爲零;當它們超出範圍時,它們將被自動設置爲零。 ARC指出如何保留/釋放實例變量,因此不需要在那裏做任何特殊的事情。

正如您所提到的,當您在視網膜顯示器上運行應用程序時會發生問題。考慮到你的代碼與圖像密切相關,我懷疑這個問題與圖像有關。這可能是Image.png是高分辨率,並在視網膜設備上分配的方式,使用大量的內存。

我建議你試試:

  • 一)調用攝像畫面initWithFrame:後來打電話setImage:,這樣的圖像視圖不會調整或奇怪的處理,因爲怪異UIImage視網膜的行爲。
  • b)手動調整資源的大小Image.png要小一些。這可以通過任何基本的圖像編輯器完成,例如預覽。