2010-10-11 76 views
1

我嘗試了2種爲視圖控制器創建背景圖像的不同方法。在視圖控制器中的背景圖像導致內存增加+ UIColor colorWithPatternImage

我以前研究這一點,並得出結論,對於記憶力好做法,你應該使用這種方法:當使用其他方法

NSString *path = [[NSBundle mainBundle] pathForResource:@"controllerBackground" ofType:@"png" inDirectory:@""]; 

[self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:path]]]; 

[self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"controllerBackground.png"]]]; 

這是效率不高如使用imageWithContentsOfFile:路徑方法。

但是,當使用性能工具「泄漏」監視器測試這兩種方法時,我觀察到一件非常不尋常的事情發生。

使用imageWithContentsOfFile:path方法時,問題是,當在加載視圖控制器的導航控制器內來回移動時,每次視圖控制器加載時,內存將保持在大約1mb附近。

這個問題也只出現在新的iOS 4.1和4.它似乎沒有發生在iOS 3.0或3.2。

+0

bump ...任何人? – Allan 2010-10-24 23:21:31

回答

0

艾倫,我面臨同樣的問題,發現colorWithPatternImage和initWithPatternImage正在比預期的大內存。這是一個解釋相同的鏈接。

http://www.cocoabyss.com/coding-practice/colorwithpatternimage-abusive-memory-usage/

更好地避免對背景圖像兩種方法。

+2

colorWithPatternImage佔用大量內存,因爲它必須將圖像加載到RAM中。 UIImageView不會這樣做,而是將其添加到紋理內存。 colorWithPatternImage是爲了與小圖像(如10x10px)一起使用而重複使用,爲此,它的工作非常好。 – Accatyyc 2013-04-04 14:32:09

3

這裏有一個修復程序,爲我工作。

UImage *image = [UIImage imageNamed:@"name.png"]; 
self.view.layer.contents = (id) image.CGImage; 

你必須導入QuartzCore,現在我沒有2MB內存增加每次我去那個觀點。

+0

我對此非常陌生 - 我在哪裏放這個代碼?在ViewController.h文件中?還是.m?代碼去哪些文件中?我到處嘗試,並不斷收到錯誤。 – Alfo 2012-06-07 17:37:09

+3

除非我錯了,否則不會創建圖案,只需將圖像設置爲視圖的背景即可。 – Taum 2012-06-15 20:27:58

+0

@m文件中的課程。我在我的viewController的viewDidLoad方法中做到了。關於錯誤,您是否添加了QuartzCore框架並將它們添加到類中? – newDeveloper 2012-06-28 16:00:45