iphone - IOS:使用图案图像作为背景 - 内存泄漏

标签 iphone ios uiimage memory-leaks cgimage

好的。我会寻找答案,而且可能会自己找到。我有一个讨厌的习惯,就是自己回答问题。

无论如何,我有一个应用程序可以很容易地“换肤”。作为其中的一部分,我在特定于变体的静态类中隔离了方法。这些静态方法提供主要应用程序图像、颜色和特定于变体的设置。 .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/

相关文章:

ios - 性能缓慢 Json 图像分辨率

iphone - 如何整合我的 Xcode 项目文件?

iphone - 在 UITextField 中添加按钮

iphone - "-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data"未调用

ios - FetchRequest 数据错误问题

iphone - 为什么我的 UIImages 电影会失真?

iphone - 两个 View Controller 之间viewDidAppear和viewDidDisappear的回调顺序

ios - 快速隐藏栏按钮项目

ios - WebCamTexture iOS 模糊快照

ios - UIButton图像大小