OK ,爲何會寫這篇文章呢?由於最近接觸老一些面試者,總感受他們認爲作應用只是純粹的搭個界面,卻不知不單單如此。
咱們從哪幾個方面來測試應用的性能呢?
這裏,由於沒用真機來調試因此不會出現fps選項。下面再來一個
這裏能夠測試fps ,提示必須真機來運行,fps爲0由於你沒用動。
fps接近於60幀,那麼你的app是至關的流暢,固然代價是要付出不少不少,然而說這些沒有什麼卵用,上面看的是翻天覆地的變化,沒翻天覆地變化覺得你就換換皮膚呢。
在沒有不少業務開發者,和架構組的IOS app怎麼提升性能呢?
第一:架構方面
誰說咱們app 沒有架構了。咱們能夠參考MVC ,MVVM ,MVP 等一些東西來提煉出咱們本身東西。
咱們網絡請求的數據能夠根據每一個API來建立一個類,這個類用來接受params ,返回json
1:好比model 數據層咱們能夠接收網絡請求過來的JOSN 或者XML轉化成數據模型來使用,所以這裏面除了你的模型屬性字段,還應該有一個接收json轉化model 的方法。還能夠實現你的copy協議方法,以及歸檔方法方面數據持久化。
2:view 負責視圖元素展現。你能夠在這裏面,
重寫佈局
或者cell高度以及給cell上元素經過傳過來的model 賦值。
注意紅線部分會觸發樓上重寫佈局方法。
3:你甚至能夠有一個數據持久化的類,來作model 的緩存,好比頭文件能夠有一些save model to cache,update model to cache ,load model from cache, delete model from cache
4:控制器裏作些什麼呢
#import Controllers
#import Models
#import Views
#import Cells
上面導入的頭文件必須分組織隔開
#pragma mark - Constants Define
一些cell 的標識符,常量定義
#pragma mark - Properties Getter And Setter
get set 方法實現 主要是get 方法能夠在這裏面作懶加載,須要時候再建立,在內存等方面獲得優化,我不少幾乎全部的建立東西都是懶加載,還在抱怨內存和跳轉速度嗎,不妨一試
#pragma mark - Controller Life Cycle
控制器生命週期
- (
void
)viewDidLoad {
[
super
viewDidLoad];
// Do any additional setup after loading the view.
}
- (
void
)didReceiveMemoryWarning {
[
super
didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Setup
設置界面UI 等
#pragma mark - Actions
view上觸發的事件讓控制器通知model等
下面就是不少協議方法
#pragma mark - UITableViewDelegate And UITableViewDataSource
#pragma mark - UICollectionViewDelegate And UICollectionViewDataSource
5:咱們須要一個類來作一些業務邏輯的東西
好比
- (NSArray*)getAlbums;面試
- (void)addAlbum:(Album*)album atIndex:(int)index;數據庫
- (void)deleteAlbumAtIndex:(int)index;
這裏面會導入網絡請求邏輯,數據存儲邏輯,轉化model邏輯。咱們在控制器調用這個類的頭文件API方法能夠良好隔離model ,網絡請求,model ,cache等邏輯。就是下圖
也就是下圖的結構,view上觸發一個業務邏輯好比fetch 數據顯示到views。controller 調用API邏輯的fetch數據接口。而後API裏面邏輯有獲取json 轉化model。model的管理cache方面。最後獲取到數據把model給view 的setModel 方法,給View展現數據。
下篇從網絡,緩存方面來介紹,而後數據庫,多線程,UI流暢度方面介紹,代碼規範,頁面佈局等介紹。