好。 我要寻找的答案,并且可能会发现它自己。 我回答我自己的问题的坏习惯。
在任何情况下,我有被设计为一个应用程序“剥皮”相当容易。 作为其中的一部分,我已经封存在一个静态类,它是专门针对变体的方法。 这些静态方法喂养具体到变种主要应用图片,颜色和设置。 .h文件是常见的主要应用,但.m文件是具体到变种。
我喜欢用的能力来发送的图像作为背景(其是自动平铺),所以接口文件指定程序作为返回的UIColor,像这样:
+ (UIColor *)meetingDetailBackgroundColor;
但执行文件加载图像文件,并返回,就像这样:
+ (UIColor *)meetingDetailBackgroundColor
{
return [UIColor colorWithPatternImage:[UIImage imageNamed:@"DarkWeave.png"]];
}
这是在上下文中使用,就像这样:
[[self view] setBackgroundColor:[BMLTVariantDefs meetingDetailBackgroundColor]];
注:编辑,以恢复原来的简单的代码,我使用。
现在,问题是,我有时(并不总是)获得了泄漏。
我敢肯定,我在这里做什么hinky。 我只是不知道是什么。
有任何想法吗?
BTW:这是一个ARC程序,在IOS 5运行我是新来的弧线,但我觉得这是我应该做的方式。
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]
使之成为背景。 它运行在设备上更快,并导致零内存泄漏。
到initilise共享的颜色,最好的办法是这样的:
+ (UIColor *)color
{
static UIColor *color;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
color = [[UIColor alloc] init...];
});
return color;
}
它是线程安全的,只有初始化颜色一次。 这样,没有办法,你可以泄漏的颜色。
好。 我解决了这个,但我并没有解决它。
我踢。
这的确是,仪器乱撞。 有没有错,我指定的颜色的方式(不过,我很喜欢的一个建议这里,和我重做色彩规范这种方式)。
这似乎是一个非常小的泄漏,地方深深地埋在深处(我的意思是,从字面上)MapKit的。 似乎是绝对没有,我可以做些什么来解决这个问题。
几个小时砖墙/大脑皮层的互动之后,我就放弃了,搞得屏控制器对象重用。 我只是把它四处张望,并更改内容,以适应正在检查的会议。
这使关闭泄漏,直到应用程序关闭。
我就是这样的窝囊废。
谢谢。