IOS:使用模式图像作为背景 - 内存泄漏

Chr*_*all 2 iphone memory-leaks uiimage cgimage ios

好.我会寻找答案,也可以自己找.我有回答自己问题的恶习.

无论如何,我有一个应用程序,旨在相当容易"皮肤化".作为其中的一部分,我在静态类中隔离了特定于变体的方法.这些静态方法提供特定于变体的主应用程序图像,颜色和设置..h文件对于主应用程序是通用的,但.m文件特定于变体.

我喜欢使用能够发送图像作为背景(自动平铺),因此接口文件指定例程返回UIColor,如下所示:

+ (UIColor *)meetingDetailBackgroundColor;
Run Code Online (Sandbox Code Playgroud)

但是实现文件加载了一个图像文件,并返回它,如下所示:

+ (UIColor *)meetingDetailBackgroundColor
{
    return [UIColor colorWithPatternImage:[UIImage imageNamed:@"DarkWeave.png"]];
}
Run Code Online (Sandbox Code Playgroud)

在上下文中使用哪个,如下所示:

[[self view] setBackgroundColor:[BMLTVariantDefs meetingDetailBackgroundColor]];
Run Code Online (Sandbox Code Playgroud)

注意:编辑恢复我使用的原始简单代码.

现在,问题是我有时(并不总是)得到泄漏.

我确定我在这里做些什么.我只是不确定是什么.

有任何想法吗?

BTW:这是一个在IOS 5上运行的ARC程序.我是ARC的新手,但我认为这是我应该这样做的方式.

He *_*ing 7

UIColor colorWithPatternImage马车,不要使用它.我的经验是,它往往会严重削弱设备的性能,但不会削弱模拟器的性能.像滚动或动画一样的东西往往会变慢.我不确定这是否真的有资格作为泄漏,我没有看到App因为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);
}
Run Code Online (Sandbox Code Playgroud)

这将平铺图像.然后我使用self.tableView.backgroundView[self.view insertSubview:bkgnd atIndex:0]使其成为背景.它在设备上运行得更快,并导致零内存泄漏.