2010-10-11 73 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