iOS App性能提升的技巧

原文引用https://www.dazhuanlan.com/2019/08/26/5d62f6f027452/


/

OPTIMIZATION

25 iOS App Performance Tips & Tricks翻译了部分提高app性能的技巧

中阶性能提升建议

9)复用和延迟加载

更多的视图意味着更多的绘制,这些最终意味着更多CPU和内存的开销。在通过UIScrollView展示很多视图时开销尤为明显。

因此,效仿UITableView和UICollectionView的思路,并不在一开始就创建所有视图,在需要的展示时候创建,并不显示的视图加入重用队里里。

通过这个方法我们显示新的视图时,只需要设置复用视图的属性,而避免了新建视图会引起的内存分配和初始化开销。

延迟加载的方法也可以用在其它情景。比如你需要通过点击按钮来展示一个视图,至少有两种实现形式:

  1. 在页面加载时创建并隐藏。需要时再显示出来。
  2. 直到点击按钮时才创建并显示。

这两种方法各有优缺点。第一种会长期占用内存空间,但是显示速度快。第二种刚好相反,不占空间但展示慢。具体采用哪种方式可以根据应用场景权衡。

10)缓存、缓存、缓存

一项普遍的的开发经验就是”缓存那些有必要缓存的东西”,即缓存那些不太会改变但是经常访问的数据。
具体可以缓存什么数据呢?比如服务器返回的数据,图片,甚至是计算后的值如UITableView的高度。
NSURLConnection已经根据HTTP请求头将资源存储到本地或内存中,你甚至可以人为设置NSURLRequest,让它只访问缓存的数据。

	+ (NSMutableURLRequest *)imageRequestWithURL:(NSURL *)url {
	    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

	    request.cachePolicy = NSURLRequestReturnCacheDataElseLoad; // 这一选项会总是返回缓存的图片
	    request.HTTPShouldHandleCookies = NO;
	    request.HTTPShouldUsePipelining = YES;
	    [request addValue:@"image/*" forHTTPHeaderField:@"Accept"];

	    return request;
	}

注意,你可以用NSURLConnection来进行URL请求,同样AFNetworking也可以。而且你不需要改变什么代码,因为它已经做得足够好。

如果你想了解更多关于HTTP缓存的知识,可以涉猎NSURLCache,NSURLConnection等相关知识,确保浏览了NSHipster网站上的这篇文章
如果你需要缓存不包含在HTTp请求中的数据,可以涉猎NSCache。NSCache和NSDictionary表现的很像,但是当系统需要更多空间资源时,它会被释放。Matt Thompson在NSHipster写了一篇很赞的文章可以阅读一下。
想要了解更多关于HTTP缓存的知识,推荐阅读Google的《 best-practices document on HTTP caching》

11)考虑图形绘制

在iOS上有好几种方式可以实现漂亮的按钮。可以用全尺寸图片或可伸缩图片显示,再复杂点用CALayer,CoreGraphics甚至OpenGL来绘制。

这些效果的实现难度不同和当然性能也不同。有篇很棒的文章讲述iOS图形性能,很值得阅读。同时,苹果UIKit项目组的成员Andy Matuschak也针对这篇文章给出了深度的分析。

简而言之,使用图片是最快的,因为iOS省去了绘制图形的过程,直接将图片渲染到屏幕上。问题是你需要把所有的图片都放入bundle中,这增加了app的大小。所以使用可伸缩尺寸的图片来绘制按钮更好。iOS会帮你绘制那些重复的纹理。你也不用针对不同尺寸的元素(如按钮)生成不同的图片。

毕竟通过使用图片你可能会丧失图片微调的能力,当你需要对不同的场景对视图进行微调时,你依旧需要处理大量的图片,不能通过代码直接调整。这会是一个繁复的过程。

所以,在绘制性能和app大小上,你需要根据自己的需要进行折中。

高阶性能提升建议

22)提升进程启动速度

启动速度提升主要的核心在于避免阻塞主线程,异步处理繁重的任务,如网络请求、数据库操作或者解析数据。同时避免加载臃肿的XIB文档,XIB文档在主线程中加载,而storyboard不存在这个问题,有需要可以尽可能考虑storyboard。

23)使用Autorelease Pool

NSAutoreleasePool是用于释放对象的进程块。通常情况下由UIKit来调用。但是在有些场景中我们需要认为创建。

比如当你需要创建大量的临时对象时,内存使用量会因此飙升直到未来某时刻统一被UIKit释放。这就意味这些临时对象存在的时间比需要的时间长。所以我们需要手动及时地释放这些对象。

    NSArray *urls = <# An array of file URLs #>;
        for (NSURL *url in urls) {
            @autoreleasepool {
                NSError *error;
                NSString *fileContents = [NSString stringWithContentsOfURL:url
                                         encoding:NSUTF8StringEncoding error:&error];
            /* 处理数据或其它创建操作 */
        }
    }

24)选择性图片缓存

有两种常见的方式来加载app bundle中的图片。imageNamedimageWithContentsOfFile。前者会先从系统缓存中寻找图片对象,如果没有则创建新的对象并缓存,适用于频繁使用的图片。后者没有缓存机制,适合不常使用的资源消耗较大的图片。

25)避免使用Date Formatter

在大量需要用到NSDateFormatter的情景下,可使用类似单例的形式初始化,重复使用一个NSDateFormatter对象。如果想要进一步提高速度,则可以采用C语言的方式。还有一种更好的方式就是使用Unix timestamps。一个标示时间的浮点数,纪录了自1970年1月一日到现在的时间间隔。通过NSDate很容易的实现时间转换。

    - (NSDate*)dateFromUnixTimestamp:(NSTimeInterval)timestamp {
        return [NSDate dateWithTimeIntervalSince1970:timestamp];
    }

原文地址:https://www.cnblogs.com/petewell/p/11410421.html

时间: 2024-11-10 14:03:12

iOS App性能提升的技巧的相关文章

提高iOS App性能的建议和技巧

当我们开发iOS应用时,好的性能对我们的App来说是很重要的.你的用户也希望如此,但是如果你的app表现的反应迟钝或者很慢就会让你得到不好的评论. 然而,由于IOS设备的限制有时很难工作得很正确.我们开发时有很多需要我们记住这些容易忘记的决定对性能的影响. 这是为什么我写这篇文章的原因.这篇文章用备忘录的形式集合了25个技巧和诀窍可以用来提高你的app性能.所以耐心的阅读来给你未来的App一个很不错的提高. Note:在优化代码之前,必须保证有个需要解决的问题!不要陷入"pre-optimizi

25条提高iOS App性能的建议和技巧

这篇文章来自iOS Tutorial Team 成员 Marcelo Fabri, 他是 Movile 的一个iOS开发者. Check out his personal website or follow him on Twitter.原文地址      当我们开发iOS应用时,好的性能对我们的App来说是很重要的.你的用户也希望如此,但是如果你的app表现的反应迟钝或者很慢就会让你得到不好的评论. 然而,由于IOS设备的限制有时很难工作得很正确.我们开发时有很多需要我们记住这些容易忘记的决定

25条提高iOS App性能的技巧和诀窍

 这篇文章来自iOS Tutorial Team 成员 Marcelo Fabri, 他是 Movile 的一个iOS开发者. Check out his personal website or follow him on Twitter.原文地址      当我们开发iOS应用时,好的性能对我们的App来说是很重要的.你的用户也希望如此,但是如果你的app表现的反应迟钝或者很慢也会伤害到你的审核. 然而,由于IOS设备的限制有时很难工作得很正确.我们开发时有很多需要我们记住这些容易忘记的决定对

[转]25条提高iOS App性能的技巧和诀窍

以下这些技巧分为三个不同那个的级别---基础,中级,高级. 基础 这些技巧你要总是想着实现在你开发的App中. 1. 用ARC去管理内存(Use ARC to Manage Memory) 2.适当的地方使用reuseIdentifier(Use a reuseIdentifier Where Appropriate) 3.尽可能设置视图为不透明(Set View as Opaque When Possible) 4.避免臃肿的XIBs文件(Avoid Fat XiBs) 5.不要阻塞主进程(D

iOS app性能优化(转)

iPhone上面的应用一直都是以流畅的操作体验而著称,但是由于之前开发人员把注意力更多的放在开发功能上面,比较少去考虑性能的问题,可能这其中涉及到objective-c,c++跟lua,优化起来相对复杂一些,导致应用在比如touch等较低端的产品上,光从启动到进入页面就花了将近一分钟的时间,页面之间的切换没有那种很流畅的感觉,内存也居高不下,比较影响应用的用户体验,所以很有必要进行一些优化,下面记录一下我在优化的过程中的一些心得: 1 instruments ??在iOS上进行性能分析的时候,首

iOS App 性能优化总结

今天简单总结一些clientapp 优化的方案和方向. 我相信开发一个app大部分团队都能够完毕,可是性能久不一样啦,和我们都写一个冒泡算法一样,我相信每一个人写的冒泡算法都不一样,这些区别就带来了性能的区别. 所以一个好的app 不止看设计.和创意 ,还要看性能. 以下我就简单说几点性能优化点: 一.首页启动速度 启动过程中做的事情越少越好(尽可能将多个接口合并) 不在UI线程上作耗时的操作(数据的处理在子线程进行,处理完通知主线程刷新节目) 在合适的时机開始后台任务(比如在用户指引节目就能够

Web性能优化系列:10个JavaScript性能提升的技巧

由 伯乐在线 - Delostik 翻译,黄利民 校稿.未经许可,禁止转载!英文出处:jonraasch.com.欢迎加入翻译小组. Nicholas Zakas是一位 JS 大师,Yahoo! 首页的前端主程.他是<高性能 Javascript>的作者,这本书值得每个程序员去阅读. 当谈到 JS 性能的时候,Zakas差不多就是你要找的,2010年六月他在Google Tech Talk发表了名为<Speed Up Your Javascript>的演讲. 但 Javascrip

Android App性能优化十技巧

无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件开发公司以及广大程序员们头疼的一大难题.今天,就给大家提供几个提高Android App性能的技巧.推荐学习Android应用开发入门教程. 高效地利用线程 1.在后台取消一些线程中的动作 我们知道App运行过程中所有的操作都默认在主线程(UI线程)中进行的,这样App的响应速度就会受到影响.会导致

ios app性能分析

苹果app的流畅性一般比安卓的要好的多.应该是和苹果系统的设计理念同样,早期的iphone4曾经是绝对单任务,仅仅能做一件事情,尽管添加了后台能够.音乐播放,定位等有限的服务.可是大多数普通应用切换到后台就别挂起,直到被系统杀死(10--15分钟).一个任务当然内存利用率和cpu调度管理就要好管理多了,效率也高.app也不作为server.也不存在超多个socket链接的问题.当然app的性能问题和pc的应用性能问题全然不同. app主要负责的是数据请求与展示,所以app主要是表如今数据请求方面