代码之家  ›  专栏  ›  技术社区  ›  avance

是什么让NSArray访问这么慢?

  •  1
  • avance  · 技术社区  · 14 年前

    我正在为一个iPhone应用程序设计一个图形效果,这个应用程序模拟了旧时代的低分辨率等离子效果。我在屏幕上有600个方格,它们正在以尽可能快的速度更新。因为我使用的是CoreGraphics(目前),所以我可以得到一个非常稳定的11FPS而不会冻结--

    通过消除的过程,我已经能够把它缩小到一条导致减速的线。每帧更新600个块精灵中的每一个都会出现这一行:

    //SLOOWWWNESS /LEAKING NSAUTORELEASEPOOL IS here (freezing every second or so)
    UIColor *color = [palette objectAtIndex:colorNum];
    
    //BUT DOESNT HAPPEN HERE... (works at full speed)
    UIColor *color = [UIColor colorWithRed:0.25f green:0.25f blue:colorNum/15.0 alpha:1.0f];
    

    ... 其中palete是sprite中的NSArray属性,包含我创建的UIColor对象的列表。此UIColor对象数组仅在应用程序启动时创建一次,并且所有精灵都使用相同的数组。

    有人有什么想法吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Graham Perks    14 年前

    调色板是“保留”属性。。。调色板对象真的被保留了,对吗?它是合成的,还是实现了自己的getPalette方法?

    推荐文章