對於drawRect使用,謹慎使用

2022-03-10 02:11:49 字數 921 閱讀 3808

#1.drawrect簡介

drawrect方法在uiview的使用上起著十分關鍵的作用。不知道大家注意過沒有,每一次建立uiview子類檔案時候,會有自動帶有已注釋的drawrect方法,也許從這一點就能看出這個方法的重要性。

該方法定義在uiview(uiviewrendering)分類裡面,望文生義,該方法完成檢視的繪製。

#2.什麼情況下會呼叫drawrect

檢視第一次顯示的時候會呼叫。這個是由系統自動呼叫的,主要是在uiviewcontroller中loadview和viewdidload方法呼叫之後;

如果在uiview初始化時沒有設定rect大小,將直接導致drawrect不被自動呼叫;

該方法在呼叫sizethatfits後被呼叫,所以可以先呼叫sizetofit計算出size,然後系統自動呼叫drawrect:方法;

通過設定contentmode屬性值為uiviewcontentmoderedraw,那麼將在每次設定或更改frame的時候自動呼叫drawrect:;

直接呼叫setneedsdisplay,或者setneedsdisplayinrect:觸發drawrect:,但是有個前提條件是rect不能為0;

注釋:如果初始化乙個view的時候,沒有使用initwithframe:方法,drawrect將不會被呼叫

#3.drawrect造成物件復用,引起記憶體暴增

注:在drawrect方法中建立乙個新的物件,重複執行[self addsubview:view];會導致物件重複建立,導致檢視錯誤,記憶體暴增,小心使用

#4.drawrect效能優化原則

1)繪製圖形效能的優化最好的辦法就是不去繪製。

2)利用專有圖層代替繪圖需求。

3)不得不用到繪圖盡量縮小檢視面積,並且盡量降低重繪頻率。

4)非同步繪製,推測內容,提前在其他執行緒繪製,在主線程中直接設定。

謹慎使用viewWithTag

uilabel cl title self viewwithtag 101 cl title.text infos total time uilabel cl distance self viewwithtag 102 cl distance.text infos distance uilabel ...

iOS 使用drawRect 繪製虛線橢圓

ios 使用drawrect 繪製虛線橢圓 1 首先如果要使用 drawrect 繪圖 要匯入 coregraphics.framework 框架 然後 建立 自定義view,即是 myview繼承 uiview 2 重寫 void drawrect cgrect rect方法 3 新增如下 voi...

union的謹慎使用

include using namespace std float float666 myfloat 666 myinteger myinteger 1 return myfloat int main float float666 float666 coutmyinteger也被賦值了,myinte...