儘可能用輕量級的對象,好比用不到事件處理的地方,能夠考慮使用CALayer取代UIView;git
不要頻繁地調用UIView的相關屬性,好比frame、bounds、transform等屬性,儘可能減小沒必要要的修改;github
儘可能提早計算好佈局,在有須要時一次性調整對應的屬性,不要屢次修改屬性;緩存
Autolayout會比直接設置frame消耗更多的CPU資源;性能優化
圖片的size最好恰好跟UIImageView的size保持一致;bash
控制一下線程的最大併發數量;併發
儘可能把耗時的操做放到子線程:oop
// 文字計算
[@"text" boundingRectWithSize:CGSizeMake(100, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:nil context:nil];
// 文字繪製
[@"text" drawWithRect:CGRectMake(0, 0, 100, 100) options:NSStringDrawingUsesLineFragmentOrigin attributes:nil context:nil];
複製代碼
儘可能避免短期內大量圖片的顯示,儘量將多張圖片合成一張進行顯示;佈局
GPU能處理的最大紋理尺寸是4096x4096,一旦超過這個尺寸,就會佔用CPU資源進行處理,因此紋理儘可能不要超過這個尺寸;post
儘可能減小視圖數量和層次;性能
減小透明的視圖(alpha<1),不透明的就設置opaque爲YES;
平時所說的「卡頓」主要是由於在主線程執行了比較耗時的操做;
能夠添加Observer到主線程RunLoop中,經過監聽RunLoop狀態切換的耗時,以達到監控卡頓的目的。
第三方:LXDAppMonitor