iOS開發之UITableView優化問題

2021-08-03 19:00:24 字數 1841 閱讀 9038

你會對tableview的層次結構和用法有詳細的認識。

不得不說的tableview中cell復用原理

**檢視內部維護了乙個cell的復用佇列,每次需要新的cell時,可以先從佇列中根據復用標識尋找是否有空閒的cell,若有則直接出列使用無需建立新的;若沒有可用cell則需要建立新的。**檢視上的cell離開顯示區域就會自動放入復用佇列。

第一種方式

uitableviewcell *cell = [tableview dequeuereusablecellwithidentifier:@」cellid」];

第二種方式

static nsstring *ideitifier = @」cellid」;

if (!cell)

接下來就介紹優化吧

1. 使用tableview的復用機制

作用:減少記憶體資源的消耗。

注意:cell被重用時,它內部繪製的內容並不會被自動清除,因此你可能需要呼叫setneedsdisplayinrect:或setneedsdisplay方法。

2. 提前預估高度

提前計算並快取好高度(布局),因為heightforrowatindexpath:是呼叫最頻繁的方法。

3. cell內部有

此時需要非同步載入,防止卡頓(此時的sdwebimage的每個cell中都建立乙個子執行緒嗎?)但是內部開啟的執行緒過多也會影響主線程的效能

解決辦法:

3.1.)在scrollerview的**方法中,didenddragging,didenddeceleratiing方法中,才開始非同步載入,其它時刻不進行載入

3.2.在didenddragging,didenddeceleratiing方法中實現方法:獲取螢幕上顯示出來的cell的indexpath陣列,然後通過遍歷indexpath的陣列,在資料來源中,如果已經載入了,就不需要再非同步載入,反之進行非同步載入,然後再cellforrow方法中也進行一次判斷:當self.tableview.dragging == no && self.tableview.decelerating == no 的時候執行非同步載入的方法

4. 盡量少用addview給cell動態新增view

可以初始化時就新增,相對於一些固定的檢視在初始化時就布局好,學會用hidden屬性來控制是否顯示。

5. 減少子檢視的數目

當cell上面的子檢視數量過多時,會影響滑動效能,當子檢視太多的時候,對適當的檢視進行繪製。

6. 使用不透明檢視

不透明的檢視可以極大地提高渲染的速度。因此如非必要,可以將table cell及其子檢視的opaque屬性設為yes(預設值)。

7. 預渲染影象和離屏渲染

你會發現即使做到了上述幾點,當新的影象出現時,仍然會有短暫的停頓現象。解決的辦法就是預渲染影象,在bitmap context裡先將其畫一遍,匯出成uiimage物件,然後再繪製到螢幕,詳細做法可見《利用預渲染加速ios裝置的影象顯示》。

離屏渲染就是在tableview中展示多張需要切圓形的,此時不要使用setcornerradius的方法,這樣耗損效能,用core graphics繪製圓角,然後返回,在sdwebimage處理我的分類返回的,並進行快取。

8. uiimage:本地載入方式本地載入常用方法有兩種:

1). [uiimage imagenamed:@」xx.png」] 多次使用時使用,需要使用此方式加入快取。

2). [[uiimage alloc] initwithcontentsoffile :@」xx.png」] 不常使用時,不使用快取。

9. 避免物件建立時過多消耗資源

例如:日期處理,將保持日期物件全域性唯一。

iOS開發之歸檔

歸檔是一種物件都可以實現的更加常規的序列化方式。適用對模型物件進行歸檔的技術可以輕鬆將複雜物件寫入檔案和從檔案中進行讀取。大多數支援儲存資料的foundation和cocos touch類都遵循nscoding協議 不過有些例外,例如uiiamge 因此對於大多數系統提供的類而言,歸檔比較輕鬆。如果...

iOS 開發之封裝

繼承,封裝,多型是物件導向程式設計的三大基石 在ui 中,封裝可以降低 的冗餘度,節省 量,避免了重複 在這裡簡單的封裝了乙個label和乙個textfield,組成了乙個登陸介面的樣式 新建了乙個檢視,這是檢視的.h檔案,這個檢視的一些方法 這個是.m檔案中 對label和textfield進行布...

IOS開發之 入門

目前主要的移動開發平台有 android ios windowsphone,前兩者佔據著絕大多數的終端應用,我們常說的移動開發就是指 android和ios開發。本位主要講述ios的開發。開發ios應用,需要專門的硬體裝置 開發工具 特定語言的支援,下面將逐一介紹這些知識點 硬體mac筆記本或一體機...