Optimizing table views for performance

Tables views are a very powerful and ubiquitous in iPhone and iPad, and in order to make them perfect, it is important to know a little bit about the structure of the cell.

The cell is the very basic element of a table view, and it is composed by a number of elements. Let’s take a look:

Cell Structure

Cell Structure

Cell The cell itself, it is a subclass of UIView, and is draw at the very bottom of the view stack. Remember when before the introduction of OS 3.0 whenever you tried to change the background color of a grouped cell, the round corners disappeared? Well, technically, that’s was the right way to change the background color, because the actual cell was not the rounded rectangle, but the rectangle that contains it.

Background View if it exist, ie, if you need to customize the looks of the cell, a background view is drawn above the cell.

Content View This is the place where you place all your content for the cell. It is just a container, it will no contribute visually to the display of the cell

Cell Paylod These can be any UIView descendant, from UILabel, toUIImageView

Editing Mode Controls and Accessory When the table enters into Edit Mode, the OS draws above the Background View the appropriate controllers, and resize accordingly the Content View

Cell Structure in Edit Mode

Selecting a Cell

When the cell is selected, the OS insert an UIView with a selected background, right above the Background View (if present). If no custom view provided, the OS insert the classic blue gradient.

All of these views should be opaque, views that are not opaque are much more expensive to render. Then, what’s happen to the payload views when the row is selected?

When the system needs to mark a cell as selected, it will call -setHighlighted:animated: method of the cell with the highlightedparameter set to YES. The default implementation of the method will iterate all the UILabel and UIImageView of the payload, saving the opaque andbackgroundColor properties and checking if each of them has either thehighlightedTextColor (in the case of UILabel) or the highlightedImage(in the case of the UIImageView). The system will also set the opaque property of each element of the payload to NO and the backgroundColor property toclearColor.

On deselection, the system will, again, calls -setHighlighted:animated:, this time with the parameter highlighted set to NO. TheselectedBackgroundView will start to fade out. Right in the midpoint of that animation, the system will iterate all the views on the payload resetting the highlighted properties. The text color of the UILabel is set to the normal textColor, and the normal UIImage of the UIImageView is repositioned. At the end of the animation, the system will iterate once again the payload views, and set the opaque property to YES and the backgroundColor to the normal color.

Cell Design

The way the cell is designed may impact in the performance to the table view. For instance, a cell that is composed with many subviews is expensive, so let’s review the available options.

Cell Composition with subviews This is the easiest way to build a Cell. You can use Interface Builder to compose the cell, and if you set the appropriate mask for each of the subviews, the cell will automatically adapt to changes in size (for instance, when device orientation is changed).

Cell Composition with a unique UIView For very complex cells, you can build a UIView, and draw all the content inside the -drawRect: method. This is much more cheaper and will enhance greatly the scrolling performance. Actually, regardless of the complexity of the cell, it is almost constant speed scrolling. Most of the cost of scrolling is re-compositing as things moves up and down the screen, not the cost of doing the first draw as the cell enters the screen.

On the other hand, it is not easy to maintain, you will have to tweak you -drawRect: for even the smallest changes on the view. You have to be aware of the device orientation, and change in code the size and position of the different elements when the device is rotated.


from:http://volonbolon.net/post/634453483/optimizing-table-views-for-performance

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值