本發(fā)明涉及uitableview(簡稱tableview)的性能優(yōu)化
技術(shù)領(lǐng)域:
:,具體說是一種tableview優(yōu)化方法。
背景技術(shù):
::uitableview是app開發(fā)中常用到的控件,功能很強大,多用于數(shù)據(jù)的顯示。uitableview繼承自uiscrollview,可以表現(xiàn)為plain和grouped兩種風(fēng)格。uitableview有兩個delegate分別為:datasource和delegate。datasource是uitableviewdatasource類型,主要為uitableview提供顯示用的數(shù)據(jù)(uitableviewcell),指定uitableviewcell支持的編輯操作類型(insert,delete和reordering),并根據(jù)用戶的操作進(jìn)行相應(yīng)的數(shù)據(jù)更新操作,如果數(shù)據(jù)沒有根據(jù)操作進(jìn)行正確的更新,可能會導(dǎo)致顯示異常,甚至crush(撞車,沖突)。delegate是uitableviewdelegate類型,主要提供一些可選的方法,用來控制tableview的選擇、指定section的頭和尾的顯示以及協(xié)助完成cell的刪除和排序等功能。提到uitableview,就必須的說一說nsindexpath。uitableview聲明了一個nsindexpath的類別,主要用來標(biāo)識當(dāng)前cell的在tableview中的位置,該類別有section和row兩個屬性,前者標(biāo)識當(dāng)前cell處于第幾個section中,后者代表在該section中的第幾行。uitableview只能有一列數(shù)據(jù)(cell),且只支持縱向滑動,當(dāng)創(chuàng)建好的tableview第一次顯示的時候,我們需要調(diào)用其reloaddata方法,強制刷新一次,從而使tableview的數(shù)據(jù)更新到最新狀態(tài)。uitableviewcontroller是系統(tǒng)提供的一個便利類,主要是為了方便我們使用uitableview,該類生成的時候就將自身設(shè)置成了其包含的tableview的datasource和delegate,并創(chuàng)建了很多代理函數(shù)的框架,為我們大大的節(jié)省了時間,我們可以通過其tableview屬性獲取該controller內(nèi)部維護(hù)的tableview對象。默認(rèn)情況下使用uitableviewcontroller創(chuàng)建的tableview是充滿全屏的,如果需要用到tableview是不充滿全屏的話,我們應(yīng)該使用uiviewcontroller自己創(chuàng)建和維護(hù)tableview。uitableviewcontroller提供一個初始化函數(shù)initwithstyle:,根據(jù)需要我們可以創(chuàng)建plain或者grouped類型的tableview,當(dāng)我們使用其從uiviewcontroller繼承來的init初始化函數(shù)的時候,默認(rèn)將會我們創(chuàng)建一個plain類型的tableview。uitableview中顯示的每一個單元都是一個uitableviewcell對象,其初始化函數(shù)initwithstyle:reuseidentifier:比較特別,跟我們平時看到的uiview的初始化函數(shù)不同。這個主要是為了效率考慮,因為在tableview快速滑動的滑動的過程中,頻繁的alloc對象是比較費時的,于是引入了cell的重用機制,這個也是我們在datasource中要重點注意的地方,用好重用機制會讓我們的tableview滑動起來更加流暢。我們可以通過cell的selectionstyle屬性指定cell選中時的顯示風(fēng)格,以及通過accessorytype來指定cell右邊的顯示的內(nèi)容,或者直接指定accessoryview來定制右邊顯示的view。系統(tǒng)提供的uitableview包含了四種風(fēng)格的布局,可以想象系統(tǒng)提供的只是最常用的幾種類型,當(dāng)系統(tǒng)提供的風(fēng)格不符合我們需要的時候,我們就需要對cell進(jìn)行定制了,有以下兩種定制方式可選:1、直接向cell的contentview上面添加subview2、從uitableviewcell派生一個類,可以更深度的定制一個cell,可以指定cell在進(jìn)入edit模式的時候如何相應(yīng)等等。最簡單的實現(xiàn)方式就是將所有要繪制的內(nèi)容放到一個定制的subview中,并且重載該subview的drawrect方法直接把要顯示的內(nèi)容繪制出來(這樣可以避免subview過多導(dǎo)致的性能瓶頸),最后再將該subview添加到cell派生類中的contentview中即可。這兩種定制cell的方法,subview都是添加在cell的contentview上面的,而不是直接加到cell上面。在tableview的使用中,常會遇到以下問題:屏幕掉幀、卡頓等現(xiàn)象。這些現(xiàn)象大幅度的降低了用戶的性能體驗,并提高了crash的頻率。因此,適當(dāng)?shù)膶ableview進(jìn)行優(yōu)化非常必要。例如:當(dāng)快速滑動tableview并且cell中有大量圖片和其他控件需要加載時,就會出現(xiàn)嚴(yán)重掉幀,有時還會crash。技術(shù)實現(xiàn)要素:針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種tableview優(yōu)化方法,有效避免卡頓、掉幀等現(xiàn)象,避免crash,支持用戶自定義顯示樣式,保證tableview數(shù)據(jù)層和顯示層的流暢性。為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是:一種tableview優(yōu)化方法,其特征在于,包括:創(chuàng)建可刷新的tableview,命名為refreshtableview,在refreshtableview中,利用ego刷新框架進(jìn)行刷新,相應(yīng)的創(chuàng)建egorefreshdelegate,在refreshtableview中,創(chuàng)建section,其中包含:作為tableview數(shù)據(jù)驅(qū)動的layout,作為tableview顯示驅(qū)動的cell,在section中,創(chuàng)建可復(fù)用tableviewsection,命名為reusesection,在section中,創(chuàng)建不可復(fù)用tableviewsection,命名為unreusesection,在section中,創(chuàng)建block以簡化tableview使用,所述block包括:封裝tableview數(shù)據(jù)驅(qū)動,封裝tableview顯示驅(qū)動,封裝tableview基本邏輯,封裝tableview基本元素。在上述技術(shù)方案的基礎(chǔ)上,所述作為tableview數(shù)據(jù)驅(qū)動的layout,支持用戶自定義數(shù)據(jù)樣式。在上述技術(shù)方案的基礎(chǔ)上,對用戶自定義數(shù)據(jù)樣式的解析采用后臺線程處理。在上述技術(shù)方案的基礎(chǔ)上,所述作為tableview顯示驅(qū)動的cell,支持用戶自定義顯示樣式。在上述技術(shù)方案的基礎(chǔ)上,在tableview使用時,直接使用section,利用section中的block簡化tableview使用。在上述技術(shù)方案的基礎(chǔ)上,將section作為tableview緩存驅(qū)動器,其中:tableview基本樣式中的plain對應(yīng)單個section,tableview基本樣式中的grouped對應(yīng)多個section。本發(fā)明所述的tableview優(yōu)化方法,有效避免卡頓、掉幀等現(xiàn)象,避免crash,支持用戶自定義顯示樣式,保證tableview數(shù)據(jù)層和顯示層的流暢性。附圖說明本發(fā)明有如下附圖:圖1本發(fā)明的架構(gòu)圖。具體實施方式以下結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)說明。如圖1所示,本發(fā)明所述的tableview優(yōu)化方法,包括:創(chuàng)建可刷新的tableview,命名為refreshtableview,在refreshtableview中,利用ego刷新框架進(jìn)行刷新,相應(yīng)的創(chuàng)建egorefreshdelegate,在refreshtableview中,創(chuàng)建section,其中包含:作為tableview數(shù)據(jù)驅(qū)動的layout,作為tableview顯示驅(qū)動的cell,在section中,創(chuàng)建可復(fù)用tableviewsection,命名為reusesection,在section中,創(chuàng)建不可復(fù)用tableviewsection,命名為unreusesection,在section中,創(chuàng)建block以簡化tableview使用,所述block包括:封裝tableview數(shù)據(jù)驅(qū)動,封裝tableview顯示驅(qū)動,封裝tableview基本邏輯,封裝tableview基本元素。在上述技術(shù)方案的基礎(chǔ)上,所述作為tableview數(shù)據(jù)驅(qū)動的layout,支持用戶自定義數(shù)據(jù)樣式。在上述技術(shù)方案的基礎(chǔ)上,對用戶自定義數(shù)據(jù)樣式的解析采用后臺線程處理。在上述技術(shù)方案的基礎(chǔ)上,所述作為tableview顯示驅(qū)動的cell,支持用戶自定義顯示樣式。在上述技術(shù)方案的基礎(chǔ)上,在tableview使用時,直接使用section,利用section中的block簡化tableview使用。在上述技術(shù)方案的基礎(chǔ)上,將section作為tableview緩存驅(qū)動器,其中:tableview基本樣式中的plain對應(yīng)單個section,tableview基本樣式中的grouped對應(yīng)多個section。本說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。當(dāng)前第1頁12當(dāng)前第1頁12