自iOS 6以来,你可能还希望header和footer views,以及UICollectionView的cell和supplementary views。

  为了使用reuseIdentifiers,在table view请求一个新的cell时,在数据源中调用下面的方法:

  static NSString *CellIdentifier = @"Cell";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

  如果table view维护的UITableViewCell队列或列表中有可用的cell,则从队列从移除一个已经存在的cell,如果没有的话,从之前注册的nib文件或类中创建一个新的cell。如果没有可以重用的cell,并且没有注册nib文件或类,tableview的dequeueReusableCellWithIdentifier:方法会返回一个nil。

  3) 尽可能将View设置为不透明(Opaque)

  尽量将view设置为Opaque

  如果view是不透明的,那么应该将其opaque属性设置为YES。

  为什么要这样做呢?这样设置可以让系统以优的方式来绘制view。opaque属性可以在Interface Builder或代码中设置。

  苹果的官方文档对opaque属性有如下解释:

  This property provides a hint to the drawing system as to how it should treat the view. If set to YES, the drawing system treats the view as fully opaque, which allows the drawing system to optimize some drawing operations and improve performance. If set to NO, the drawing system composites the view normally with other content. The default value of this property is YES.

  (opaque属性提示绘制系统如何处理view。如果opaque设置为YES,绘图系统会将view看为完全不透明,这样绘图系统可以优化一些绘制操作以提升性能。如果设置为NO,那么绘图系统结合其它内容来处理view。默认情况下,这个属性是YES。)

  如果屏幕是静止的,那么这个opaque属性的设置与否不是一个大问题。但是,如果view是嵌入到scroll view中的,或者是复杂动画的一部分,不将设置这个属性的话肯定会影响程序的性能!

  可以通过模拟器的DebugColor Blended Layers选项来查看哪些view没有设置为不透明。为了程序的性能,尽可能的将view设置为不透明!

  4) 避免臃肿的XIBs

  避免臃肿的XIBs

  在iOS 5中开始使用Storyboards,并且将替代XIBs。不过在有些情况下XIBs仍然有用。如果你的程序需要运行在装有iOS 5之前版本的设备上,或者要自定义可重用的view,那么是避免不了要使用XIBs的。

  如果必须要使用XIBs的话,尽量让XIBs文件简单。并且每个view controller对于一个XIB文件,如果可以的话,把一个view controller的view不同的层次单独分到一个XIBs文件中。

  注意:当把一个XIB文件加载到内存时,XIB文件中的所有内容都将被加载到内存中,包括图片。如果有一个view还不立即使用的话,会造成内存的浪费。而这在storyboard中是不会发生的,因为storyboard还在需要的时候才实例化一个view controller。

  当加载XIB时,所有涉及到的图片都将被缓存,并且如果是开发的程序是针对OS X的话,声音文件也会被加载。苹果的官方文档这样说:

  When you load a nib file that contains references to image or sound resources, the nib-loading code reads the actual image or sound file into memory and and caches it. In OS X, image and sound resources are stored in named caches so that you can access them later if needed. In iOS, only image resources are stored in named caches. To access images, you use the imageNamed: method of NSImage or UIImage, depending on your platform.

  (当加载一个nib文件时,也会将nib文件涉及到的图片或声音资源加载到内存中,nib-loading代码会将实际的图片或声音文件读取到内存中,并一直缓存着。在OS X中,图片和声音资源都存储在命名缓存中,这样之后如果需要的话,可以对其进行访问。在iOS中,只有图片资源被存储到命名缓存中。要访问图片的话,使用NSImage或UIImage(根据不同的系统)的imageNamed:方法即可。)

  显然,在使用storyboard时也会发生类似的缓存操作;不过我没有找到相关内容的任何资料。如果你知道的话,可以告诉我哦!

  想要学习storyboard的更多知识吗?可以看看Matthijs Hollemans写的iOS 5中:初级Storyboard Part 1和Part2。

  5) 不要阻塞主线程

  不要阻塞主线程

  永远都不要在主线程做繁重的任务。因为UIKit的任务都在主线程中进行,例如绘制、触摸管理和输入响应。

  在主线程做所有任务的风险是:如果你的代码阻塞了主线程,那么程序将出现反应迟钝。这回招致用户在App Store上对程序的差评!