设置UITableView的背景图像会占用内存并冻结应用程序

时间:2013-11-22 08:24:16

标签: ios objective-c uitableview

在AppDelegate中我有:

    UIView *backgroundView = [[UIView alloc] init];
    backgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"menu_fon"]];
    backgroundView.frame = self.window.frame;
    [[UITableView appearance] setBackgroundView:backgroundView];

该应用程序在简单和滑块控制器中有几个表。这些控制器中的一些在这种背景下运行良好,但有时当我尝试用表打开一些滑块时 - 应用程序冻结,分配的内存越来越多。

有没有办法设置表格(或整个地图)的背景而没有这种不受欢迎的行为?感谢

3 个答案:

答案 0 :(得分:2)

您正在创建UIView以用作“背景”。  这不仅是一种记忆拖拽,也不是实现你想要的首选方式。

我建议您为每个UITableView添加背景,但您的方法也可以正常工作,如下所示:

[[UITableView appearance] setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"menu_fon"]]];

不是花费内存来创建新对象并将其添加到现有对象,而是将图像直接添加到UITableView的背景中。

或者,您可以将背景直接添加到每个UITableView,如下所示:

[TABLEVIEWNAME setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"menu_fon"]]];

这可以解决您的问题,如果它仍然包含在此之后,我建议您查看其余的代码。

答案 1 :(得分:1)

背后的原因是拉伸/调整图像资源非常耗费资源。根据您的需要,您可以:

  • 创建所需尺寸的图像
  • 创建一个图像并将其设置为控制器中整个视图的背景,并将每个UIViews背景设置为[UIColor clearColor]。

答案 2 :(得分:0)

为什么不直接使用UIImageView作为你的backgroundView,即:

[[UITableView appearance] setBackgroundView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"menu_fon"]];