我一直在努力解决这个问题超过一个月,试图找出导致它没有解决方案的原因。由于代码很长,我不能在这里发布。
基本上我已经制作了绘图应用程序。当你在屏幕上点击屏幕时,一切都会重置,就像我正在重新加载视图一样。当我重置场景时,处理器的使用率将下降到9%左右,但是当我再次开始绘图时,处理器的使用率会上升到我上次结束的位置。所以说例如我绘制和图像并且处理器功率上升到50%,然后重复点击以将视图重置为从开始它将下降到9%的内容。然后,当我再次开始绘制时,它将上升到50%,下一次是60%,70%等。
也许你很难看到由于缺乏信息导致问题的原因所以我可以发送我的源代码,如果有人有兴趣通过PMing我来帮助我。
greentimer = [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(movement2) userInfo:nil repeats:YES];
-(void)movement2{
static int intigrer;
intigrer = (intigrer+1)%3;
UIGraphicsBeginImageContext(CGSizeMake(320, 568));
[drawImage.image drawInRect:rekked];
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetLineCap(ctx, kCGLineCapRound);
CGContextSetLineWidth(ctx, 8.0);
CGContextSetRGBStrokeColor(ctx, r12, g12, b12, 1);
CGContextBeginPath(ctx);
if (intigrer == 1 && integrer2 < greenran - greenran2) {
CGPathMoveToPoint(path, NULL, greentmporary.x, greentmporary.y);
CGPathAddLineToPoint(path, NULL, greenpoint1.x, greenpoint1.y);
}
green.center = greenpoint1;
if (integrer2 < greenran - greenran2) {
CGContextMoveToPoint(ctx, greentmporary.x, greentmporary.y);
CGContextAddLineToPoint(ctx, greenpoint1.x, greenpoint1.y);
}
CGContextStrokePath(ctx);
[drawImage setFrame:CGRectMake(0, 0, 320, 568)];
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// [self updatePoint2:YES];
static BOOL yes;
if (!yes) {
[self.view insertSubview:drawImage atIndex:0];
yes = YES;
}
ctx = nil;
}
答案 0 :(得分:0)
您需要发布CGPath和CGImages
CGPathRelease(path);
CGImageRelease(image);
CGContextRelease(context);
答案 1 :(得分:0)
我认为您的问题是,由于您不断向其添加子视图,因此计时器每次激活都会使self.view
更复杂。因此,每次渲染到完全重置之前,场景的复杂性都会增加。说实话,我不能真正遵循你的所有代码,因为我不熟悉你想要实现的目标。
我认为解决问题的方法是使用带有Profile选项的Instruments运行程序(而不是执行&#39; Run&#39;)。选择&#39;自动化&#39;模板。 有一种方法可以在正在运行的程序上发出logElementTree(),并使用图像转储UIView层次结构。有很多好文章,例如 http://cocoamanifest.net/articles/2011/05/uiautomation-an-introduction.html