iOS複習(二)
app的啟動流程
進入main函式,在main函式中執行了 UIApplicationMain這個方法,這是ios程式的
入口
int UIApplicationMain(int argc, char argv[], NSString principalClassName, NSString *delegateClassName)
argc、argv:ISO C標準main函式的引數,直接傳遞給UIApplicationMain進行相關處理即可
principalClassName:指定應用程式類,該類必須是UIApplication(或子類)。如果為nil,則用UIApplication類作為預設值
delegateClassName:指定應用程式類的代理類,該類必須遵守UIApplicationDelegate協議
此函式會根據principalClassName建立UIApplication物件,根據delegateClassName建立一個delegate物件,並將該delegate物件賦值給UIApplication物件中的delegate屬性
UIApplication物件會依次給delegate物件傳送不同的訊息,接著會建立應用程式的main runloop(事件迴圈),進行事件的處理(首先會呼叫delegate物件的application:didFinishLaunchingWithOptions:)
程式正常退出時這個函式才返回。如果程式要被系統強制殺死,一般這個函式還沒來得及返回程式就終止了
tableview的優化
- cell的重用
我們應該在cell顯示出來後再執行,可以在tableView:willdisplayCell:forRow中進行資料繫結
willdisplayCell在tableview展示之前就會呼叫,此時cell例項已經生成,所以不能改變cell的結構,只能改變cell的UI的一些屬性
2.cell的高度計算
1.定高 高度是固定的
self.tableview.rowHeight = 88
也可以在代理裡面改變高度 注意 如果寫了代理方法 上面的rowHeight將無效
2.動態高度(就是高度不確定)
自從ios8以後就有了 self-sizing cell 的概念,cell可以自己計算高度,使用self-sizing必須滿足三個條件
- 使用autolayout佈局 上下左右都要有約束關係
2.指定tableview的estimatedRowHeight屬性的預設值
3.指定tableview的rowHeight為UITableViewAutomaticDimension
這是 在滿足這些條件後 並且 cell上的 ui不會根據 需求 hidden的時候 可以用
如果和微博 或者朋友圈是的 需要 有圖片載入圖片 並且位置關係 會變的情況 上述方法不可行
3 計算並快取高度
類似於朋友圈
這時候的高度 需要計算 並且計算過要快取起來 不能每次都去計算 這樣會造成掉幀現象
一.先建立一個 高度類 各個控制元件的高度 以及和上個控制元件之間的距離
class RowHeightModel: NSObject {
var topHeight: CGFloat = 135
var bottomHeight: CGFloat = 0
var commenTop: CGFloat = 0
var commentHeight: CGFloat = 0
var contentHeight: CGFloat = 0
var contentTop: CGFloat = 0
var likeHeight: CGFloat = 0
var likeTop: CGFloat = 0
var imageHeight: CGFloat = 0
var imageTop: CGFloat = 0
var imageW: CGFloat = 0
var askInfoHeight: CGFloat = 0
var askInfoTop: CGFloat = 0
var replyheight: CGFloat = 0
var replyTop: CGFloat = 0
var pdfTop: CGFloat = 0
var pdfHeight: CGFloat = 0
override init() {
super.init()
}
}
類似於這個樣子
然後在網路請求結束後 根據model計算每一個model需要佔的高度
這時候又要說了 剛進去會不會很慢 因為需要計算
這時候用到網路快取 具體可以去看yycache
進頁面的時候先去取快取資料 沒有的話 等待網路請求
有快取資料的話 顯示快取資料 再重新整理就好
3.渲染
4 減少檢視的數目
5 減少多餘的繪製操作
6 不要給cell動態的新增subView(這需要繪製)
7 離屏渲染
// 下面的情況會觸發離屏渲染
為圖層設定遮罩
將圖層的masksToBounds屬性設定為true
將圖層layer.allowsGroupOpacity屬性設定為true和layer.opacity小於1.0
為圖層設定陰影
具有layer.cornerradius 的圖層
使用CGContext在DrawRect方法繪製 大部分情況下會導致離屏渲染,甚至僅僅是一個空的實現
ios9之後 uibutton設定圓角會觸發離屏渲染,而UIImageView裡面的png圖片設定圓角不會觸發離屏渲染,如果設定其他陰影效果之類還是回觸發離屏渲染的
相關文章
- canvas複習總結(二)Canvas
- jquery複習總結二jQuery
- 面試複習筆記二(javaweb)面試筆記JavaWeb
- iOS學習資源(二)iOS
- JavaScript 複習之各類事件(二)JavaScript事件
- Vue學習筆記(二)------axios學習Vue筆記iOS
- 計算機二級Java複習1計算機Java
- NoSQL 複習 (二)HBase基本原理SQL
- 複習(二):KMP、Trie、最大異或對、KMP
- 第二階段複習——組合
- Java複習筆記第二篇--集合學習之實現原理二Java筆記
- axios二次封裝學習iOS封裝
- VC++深入詳解--之複習筆記(二)C++筆記
- 2.27 二分圖與網路流複習
- 程式碼隨想錄二刷複習(二分法)
- 古典密碼的演化 (一)— 密碼學複習(二)密碼學
- 古典密碼的演化 (二)— 密碼學複習(三)密碼學
- 【Struts2複習知識點二】-namespace的配置namespace
- iOS學習筆記20 地圖(二)MapKit框架iOS筆記地圖APK框架
- iOS之物件複製iOS物件
- axios 重複提交iOS
- iOS學習之iOS沙盒(sandbox)機制和檔案操作(二)iOS
- 複習第二天總結筆記3.19筆記
- 還在學iOS?是時候學習Flutter了(二)iOSFlutter
- 系統學習iOS動畫之二:自動佈局iOS動畫
- Weex 學習與實踐(二):iOS 整合的 tipsiOS
- javase複習Java
- SQL複習SQL
- 複習 面試面試
- Noip 複習
- iOS UILABEL \UIIMAGE複製iOSUI
- iOS 複製/黏貼UIPasteboardiOSUIAST
- MySQL 8 複製(二)——半同步複製MySql
- 複習資料結構:排序演算法(二)——氣泡排序資料結構排序演算法
- iOS學習筆記42 Swift(二)函式和閉包iOS筆記Swift函式
- 【面試】騰訊iOS開發實習電話面試記錄(二)面試iOS
- iOS複習和麵試中有關SDWebImage可能知識點總結(2)iOSWeb
- iOS複習和麵試中有關SDWebImage可能知識點總結(1)iOSWeb