在iPhone上优化性能

在iPhone上优化性能,iphone,ios,performance,optimization,memory,Iphone,Ios,Performance,Optimization,Memory,我今天在TestFlightApp上发布了我的iPhone应用程序的第一个测试版。一切都进行得很顺利,直到我注意到应用程序的响应非常粗糙。当然没有我想要的那种“好”的本土感觉 我对内存分配/释放特别挑剔,所以我认为这不是问题所在。基本上,为了提高我的应用程序的性能,我不知道下一步该转向哪里 以下是我认为我的经济放缓的原因: 使用UIAppearance自定义大多数(如果不是全部)UI元素的外观。我使用了一种全新的字体,大量的CAGradientLayers,并对CALayer进行了大量的编辑,以

我今天在TestFlightApp上发布了我的iPhone应用程序的第一个测试版。一切都进行得很顺利,直到我注意到应用程序的响应非常粗糙。当然没有我想要的那种“好”的本土感觉

我对内存分配/释放特别挑剔,所以我认为这不是问题所在。基本上,为了提高我的应用程序的性能,我不知道下一步该转向哪里

以下是我认为我的经济放缓的原因:

  • 使用UIAppearance自定义大多数(如果不是全部)UI元素的外观。我使用了一种全新的字体,大量的CAGradientLayers,并对CALayer进行了大量的编辑,以绘制漂亮的阴影

  • 分组的UITableViewCells,用于显示地图图片和逐项列表

  • UITableViewCells,其布局在每次调用LayoutSubView时都会更新

  • 具有自定义高度的UITableViewCells。对于每次调用heightForRowAtIndexPath,我都需要重建和重新布局视图,每次都返回准确的高度

  • 因为我是以编程方式创建视图的,所以viewDidLoad调用较长的控制器加载速度往往较慢。我可以在init调用中偏移什么代码


  • 有没有人有任何处理这些问题的提示或技巧?或者,人们在发布第一个应用程序时,会有关于如何应对性能下降的故事?

    我的回答不会回答你所有的问题,但这里有几点:

    1) 确保您正在使用。路径的性能要高得多

    2) 您使用的是透明还是圆角?如果是这样,请尽量降低透明度,不要使用
    CALayer
    cornerRadius圆角。相反,在需要舍入的视图的
    drawRect
    中使用剪裁遮罩

    4) 也许您可以在数组中缓存高度,而不必每次都重复计算。根据潜在的项目数量,这可能/可能无法很好地扩展,但根据使用情况,这可能是可以接受的


    5) 是否有可以重用的视图?例如,当我在
    UITableViewCell
    上有一个自定义选择视图时,我只创建控制器持有的一个实例,并在所有单元格中引用它。

    我的答案不会解决您的所有问题,但这里有几点:

    1) 确保您正在使用。路径的性能要高得多

    2) 您使用的是透明还是圆角?如果是这样,请尽量降低透明度,不要使用
    CALayer
    cornerRadius圆角。相反,在需要舍入的视图的
    drawRect
    中使用剪裁遮罩

    4) 也许您可以在数组中缓存高度,而不必每次都重复计算。根据潜在的项目数量,这可能/可能无法很好地扩展,但根据使用情况,这可能是可以接受的



    5) 是否有可以重用的视图?例如,当我在
    UITableViewCell
    上有一个自定义选择视图时,我只创建一个由控制器持有的实例,并在所有单元格中引用它。

    您是否运行工具(或其他评测方法)来确定应用程序在哪里花费了大部分时间。在优化错误的东西之前这样做是一个好主意。

    您是否运行了工具(或其他评测方法)来确定应用程序在哪里花费了大部分时间。在优化错误内容之前执行此操作是个好主意。

    是否将图片异步加载到UITableViewCell中?是的,我会。它们是对我的服务器的异步调用。你做过任何形式的后台处理吗?还有。。。最重要的是,它是否感觉持续缓慢,或者是一个开关的东西?所有对我的服务器的调用都是异步的。而迟钝取决于观点。TableView绝对是一个压力点。还有,每当我有条件布局(尤其是UITableViewCell)时,您是否会将图片异步加载到UITableViewCell中?是的,我会。它们是对我的服务器的异步调用。你做过任何形式的后台处理吗?还有。。。最重要的是,它是否感觉持续缓慢,或者是一个开关的东西?所有对我的服务器的调用都是异步的。而迟钝取决于观点。TableView绝对是一个压力点。而且,每当我有条件布局(尤其是UITableViewCells)时,使用自定义字体而不预加载也会很昂贵。例如,在我的iPod上预加载来自“粉笔掸子”的所有ascii符号大约需要10秒钟…@Wayne:谢谢你的建议。我将试着从那里开始。高度缓存也是个好主意。这很有道理。@debleek:如何缓存字体?使用自定义字体而不预加载也会很昂贵。例如,在我的iPod上预加载来自“粉笔掸子”的所有ascii符号大约需要10秒钟…@Wayne:谢谢你的建议。我将试着从那里开始。高度缓存也是个好主意。这很有道理。@debleek:我如何缓存字体?老实说,我试过使用仪器,但没有从中得到什么好处,尽管我应该更好地使用它并坚持下去。我会再检查一遍。老实说,我试过使用仪器,但没有得到什么好处,尽管我应该更好地使用它并坚持下去。我会再检查一遍。