导读

性能对 iOS
应用之开尤其要,如果你的下失去反应或好缓慢,失望之用户会将他们的失望写满App
Store的褒贬。然而由于iOS设备的限定,有时搞好性能是同样件难事。开发进程中您晤面出无数用小心的事项,你啊很轻当做出抉择时忘记考虑性能影响。

iOS最咸属性优化(上)http://www.jianshu.com/p/9c450e512020
iOS最全属性优化(中)http://www.jianshu.com/p/ad90e90dce4f
iOS最全属性优化(下)http://www.jianshu.com/p/25e2f1ae51d2

恳请耐心读毕就首文章,为卿未来底app提个飞跃!

目录

自己要是叫起之提议用分为三独例外的等: 入门级、 中级和进阶级:
  • ###### 入门级(这是来你早晚会时不时用当你app开发被的建议)

1. 用ARC管理内存
2. 在正确的地方使用reuseIdentifier
3. 尽可能使Views透明
4. 避免庞大的XIB
5. 不要block主线程
6. 在Image Views中调整图片大小
7. 选择正确的Collection
8. 打开gzip压缩
  • ###### 中级(这些是你或于有些相对复杂气象下或者为此到的)

9. 重用和延迟加载Views
10. Cache, Cache, 还是Cache!
11. 权衡渲染方法
12. 处理内存警告
13. 重用大开销的对象
14. 使用Sprite Sheets
15. 避免反复处理数据
16. 选择正确的数据格式
17. 正确地设定Background Images
18. 减少使用Web特性
19. 设定Shadow Path
20. 优化你的Table View
21. 选择正确的数据存储选项
  • ###### 进阶级(这些建议就应在你确信他们得化解问题同得心应手的状下使用)

    22. 加速启动时间
    23. 使用Autorelease Pool
    24. 选择是否缓存图片
    25. 尽量避免日期格式转换
    

不必赘述,让我们进去正题吧~

初家性能提升
斯部分致力为片能加强性的骨干转移。但具备层次的开发者都来或会见打这个记录了有些受忽视的种之很小的性备忘录里获取部分提升。

1.用ARC管理内存
  • ARC(Automatic Reference Counting,
    自动引用计数)和iOS5一头发布,它避免了极度广的呢尽管是常事是由于我们忘记释放内存所招的内存泄露。它自动吗而管理retain和release的经过,所以你便不要去手动干预了。
    脚是公会不时用来去创造一个View的代码段:

      UIView *view = [[UIView alloc] init];
      // ...
      [self.view addSubview:view];
      [view release];
    
  • 遗忘代码段结尾的release简直像记忆吃饭一样简单。而ARC会自动在脚为你开这些工作。除了帮您免内存泄露,ARC还好扶持你增强性能,它能确保自由掉不再要的目标的内存。这都什么年代了,你该在你的富有类型里应用ARC!

2.以科学的地方以 reuseIdentifier
  • 一个支付中广的谬误就是没有吃UITableViewCells,
    UICollectionViewCells,甚至是UITableViewHeaderFooterViews设置科学的reuseIdentifier。
  • 为性最优化,table view用 tableView:cellForRowAtIndexPath:
    为rows分配cells的时节,它的数目应录取自UITableViewCell。 一个table
    view维持一个序列的数码而选用的UITableViewCell对象。不行使reuseIdentifier的话,每显示一行table
    view就只能设置新的cell。这对准性能的震慑而一定可怜之,尤其会要app的滚体验大打折扣。

  • 于iOS6从,除了UICollectionView的cells和补偿views,你呢该以header和footer
    views中利用reuseIdentifiers
3.尽量将views设置也全不透明
  • 一经您闹晶莹剔透底Views你当安装它们的opaque(不透明)属性也YES。例如一个黑色半透明的可以装也一个灰色不透明的View替代.原因是立会要系统就此一个最为优质的方式渲染这些views。这个简单的属性在IB或者代码里还好设定。

  • Apple的文档对于为图设置透明属性的叙述是:
    (opaque)这个特性让渲染系统提供了一个什么处理是view的提示。如果设为YES,
    渲染系统便以为是view是了不透明底,这令渲染系统优化一些渲染过程及增长性。如果安也NO,渲染系统正常地同任何内容做是View。默认值是YES。

  • 于相对比平稳的画面被,设置是特性不见面产生极特别影响。然而当这个view嵌在scroll
    view里边,或者是一个苛动画的平局部,不安装是特性之话语会当怪老程度上影响app的属性。

  • 换种说法,大家可能再也好掌握:

    一味使一个视图的非透明度小于1,就见面导致blending.blending操作以iOS的图形处理器(GPU)中做到的,blending主要指的凡掺像素颜色的计。举个例子,我们将有限独图层叠加在一起,如果第一个图层的起晶莹剔透效果,则最终像从的颜料计算需要拿第二独图层也设想进去。这无异于历程就是为Blending。

    怎Blending会招性的损失?

    由来是甚直观的,如果一个图层是了不透明底,则网一直显示该图层的颜色即可。而如图层是带透明效果的,则会引入更多之算计,因为需要拿下部的图层也席卷进去,进行夹后颜色之计。

4. 避免过度庞大之XIB

  • iOS5遭到在的Storyboards(分镜)正于高效取代XIB。然而XIB在片场景中依旧十分有因此。比如您的app需要适应iOS5事先的设施,或者你发出一个自定义的只是选用的view,你就是不可避免地要为此到她们。
  • 若是您不得不XIB的话语,使她们尽可能简单。尝试为每个Controller配置一个独门的XIB,尽可能将一个View
    Controller的view层次结构分散到独的XIB中失去。
    消专注的凡,当你加载一个XIB的上所有情节都于放在了内存里,包括另外图片。如果发一个请勿会见立马用到的view,你立即即是在浪费宝贵的内存资源了。Storyboards就是其余一码事务了,storyboard仅于待时实例化一个view
    controller.
  • 当你加载一个援了图片或声音资源的nib时,nib加载代码会把图片与声音文件写上内存。在OS
    X中,图片及声音资源为缓存在named
    cache中以便将来于是到常得到。在iOS中,仅图片资源会于存进named
    caches。取决于你所当的阳台,使用NSImage 或UIImage
    imageNamed:方法来博取图片资源。
5. 不用阻塞主线程
  • 世世代代不要使主线程承担了多。因为UIKit在主线程上召开有所工作,渲染,管理触摸反应,回应输入等还用以它们点就。一直利用主线程的风险就是是设你的代码真的block了主线程,你的app会失去反应

  • 绝大多数阻拦主进程的事态是您的app在召开一些牵扯到读写外部资源的I/O操作,比如存储或者网络。或者以诸如
    AFNetworking这样的框架来异步地举行这些操作。
    要是您待举行其他种类的消耗费巨大资源的操作(比如时间灵活的算计还是存储读写)那就因故
    Grand Central Dispatch,或者 NSOperation 和 NSOperationQueues.
    君得运用NSURLConnection异步地召开网络操作:

      + (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler
    
6. 在Image Views中调整图片大小
  • 要要是以UIImageView倍受形一个自bundle的图纸,你答应确保图片的深浅及UIImageView的轻重同等。在运作面临缩放图片是蛮耗费资源的,特别是UIImageView嵌套在UIScrollView未遭之景象下。
  • 如果图片是自远端服务加载的而莫可知控制图片大小,比如以下载前调整及合适大小的话,你得以下载就后,最好是因此background
    thread,缩放一蹩脚,然后在UIImageView中应用缩放后底图样。
7. 增选对的Collection

学会选择对作业场景太宜的近乎还是目标是写来会模拟高之代码的基本功。当处理collections时及时词话更对。

AppleXML有一个 Collections Programming Topics
的文档详尽介绍了可用之classes间的区别和而该在什么状况被运用其。这对其他利用collections的口的话是一个必读之文档。
呵呵,我不怕了解您因太长没看…这是有些常见collection的总:

  • Arrays: 有序的一致组值。使用index来lookup很快,使用value lookup很缓慢,
    插入/删除很缓慢。

  • Dictionaries: 存储键值对。 用键来找比较快。
  • Sets: 无序的如出一辙组值。用价值来查找很快,插入/删除很快。

8. 打开gzip压缩

  • 大方app依赖让远端资源同老三方API,你或会见出一个亟待打远端下载XML,
    JSON, HTML或者其它格式的app。
  • 问题是我们的对象是移动装备,因此而就是无克要网络状况来差不多好。一个用户现在还在edge网络,下同样分钟或就切换至了3G。不论什么场景,你一定不思量让您的用户等极端长时。
  • 减多少文档的一个道就是在服务端和汝的app中开辟gzip。这对文这种能有重胜压缩率的多寡以来会出更引人注目的功效。好信息是,iOS已经于NSURLConnection中默认支持了gzip压缩,当然AFNetworking这些根据它的框架亦然。像Google
    App Engine这些讲话服务提供者也曾经支撑了减少输出。

未完待续….

相关文章

网站地图xml地图