小编Abi*_*bix的帖子

我的iphone应用程序获得内存警告,并以6.8MB杀死

我的应用程序有一个线程,耗时工作超过一分钟,该应用程序消耗大约6.8MB的内存.我会在一段时间后收到内存警告,然后它会被杀死.我没有什么可以发布的,我甚至没有使用7MB的内存......让我发疯了...请问有什么建议吗?

memory iphone warnings didreceivememorywarning

6
推荐指数
1
解决办法
1227
查看次数

在iPhone上绘制几行和圆圈时,CGContextStrokePath性能不佳

我需要在我的视图上绘制几百行和圆圈,并且他们继续通过计时器功能,我调用[myView setNeedsDisplay]来更新视图.

我从UIView子类(myView)并实现drawRect函数来执行以下操作...

-(void) drawRect:(CGRect)rect {
   CGContextRef context = UIGraphicsGetCurrentContext();

   CGFloat red[4] = { 1, 0, 0, 1};

   CGContextSetLineWidth(context, 1);
   CGContextSetShouldAntialias(context, NO);
   CGContextSetLineCap(context, kCGLineCapSquare);
   CGContextSetStrokeColor(context, red);

   // rects is an array of CGRect of size ~200
   for (int i = 0; i < N; i++) {
      CGContextAddEllipseInRect(context, rects[i]);
   }
   // points is an array of CGPoint of size ~100
   CGContextAddLines(context, points, N);

   CGContextStrokePath(context, color);
}
Run Code Online (Sandbox Code Playgroud)

但这是狗慢.这里有什么我想念的吗?完成一次完整绘图需要大约1秒钟

iphone graphics performance xcode

4
推荐指数
1
解决办法
1501
查看次数

与 OpenGL 相比,Metal 慢得多,同时在大纹理上渲染小纹理

我正在尝试将我的项目从 OpenGL 迁移到 iOS 上的 Metal。但我似乎遇到了性能墙。任务很简单...

我有一个大纹理(超过 3000x3000 像素)。我需要在每个 touchesMoved 事件上绘制几个(几百个)小纹理(比如 124x124)。这是在启用特定混合功能的同时。它基本上就像一个画笔。然后显示大纹理。任务大致就是这样。

在 OpenGL 上它运行得非常快。我得到大约 60fps。当我将相同的代码移植到 Metal 时,我只能设法获得 15fps。

我创建了两个最低限度的示例项目来演示这个问题。这是项目(OpenGL和Metal)...

https://drive.google.com/file/d/12MPt1nMzE2UL_s4oXEUoTCXYiTz42r4b/view?usp=sharing

这大致就是我在 OpenGL 中所做的......

    - (void) renderBrush:(GLuint)brush on:(GLuint)fbo ofSize:(CGSize)size at:(CGPoint)point {
    GLfloat brushCoordinates[] = {
        0.0f, 0.0f,
        1.0f, 0.0f,
        0.0f,  1.0f,
        1.0f,  1.0f,
    };

    GLfloat imageVertices[] = {
        -1.0f, -1.0f,
        1.0f, -1.0f,
        -1.0f,  1.0f,
        1.0f,  1.0f,
    };

    int brushSize = 124;

    CGRect rect = CGRectMake(point.x - brushSize/2, point.y - brushSize/2, brushSize, brushSize);

    rect.origin.x /= size.width;
    rect.origin.y /= size.height;
    rect.size.width /= …
Run Code Online (Sandbox Code Playgroud)

performance xcode opengl-es ios metal

1
推荐指数
1
解决办法
1020
查看次数