好的。我会寻找答案,而且可能会自己找到。我有一个讨厌的习惯,就是自己回答问题。
无论如何,我有一个应用程序可以很容易地“换肤”。作为其中的一部分,我在特定于变体的静态类中隔离了方法。这些静态方法提供主要应用程序图像、颜色和特定于变体的设置。 .h 文件对于主应用程序是通用的,但 .m 文件是特定于变体的。
我喜欢使用发送图像作为背景(自动平铺)的功能,因此接口(interface)文件将例程指定为返回 UIColor,如下所示:
+ (UIColor *)meetingDetailBackgroundColor;
但是实现文件加载一个图像文件,并返回它,就像这样:
+ (UIColor *)meetingDetailBackgroundColor
{
return [UIColor colorWithPatternImage:[UIImage imageNamed:@"DarkWeave.png"]];
}
在上下文中使用,如下所示:
[[self view] setBackgroundColor:[BMLTVariantDefs meetingDetailBackgroundColor]];
注意:经过编辑以恢复我使用的原始简单代码。
现在,问题是我有时(不总是)漏气。
我确信我正在做一些古怪的事情。我只是不确定是什么。
有什么想法吗?
顺便说一句:这是一个在 IOS 5 上运行的 ARC 程序。我是 ARC 的新手,但我认为这是我应该做的。
最佳答案
UIColor colorWithPatternImage
有问题,请勿使用。我的经验是,它往往会大大削弱设备的性能,但不会削弱模拟器的性能。任何类似滚动或动画的东西都会变慢。我不确定这是否真的属于泄漏,我没有看到应用程序因为 RAM 耗尽而被杀死。但是,如果您分析该应用程序,您会发现该应用程序在启用 UIColor colorWithPatternImage
并绘制一些东西的情况下运行速度要慢得多。
最终我创建了 UIView
的子类,并做了如下操作:
- (void)drawRect:(CGRect)rect
{
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(c, kCGBlendModeCopy);
CGContextDrawTiledImage(c, CGRectMake(0, 0, bkgnd.size.width, bkgnd.size.height), bkgnd.CGImage);
}
这将平铺图像。然后我使用 self.tableView.backgroundView
或 [self.view insertSubview:bkgnd atIndex:0]
将其设为背景。它在设备上运行得更快,并且导致零内存泄漏。
关于iphone - IOS:使用图案图像作为背景 - 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10043077/