OK 命贴,為什么會(huì)寫這篇文章呢?因?yàn)樽罱佑|老一些面試者嗓袱,總感覺他們認(rèn)為做應(yīng)用只是純粹的搭個(gè)界面籍救,殊不知不僅僅如此。
我們從哪幾個(gè)方面來測(cè)試應(yīng)用的性能呢渠抹?
這里蝙昙,因?yàn)闆]用真機(jī)來調(diào)試所以不會(huì)出現(xiàn)fps選項(xiàng)。下面再來一個(gè)
這里可以測(cè)試fps 梧却,提示必須真機(jī)來運(yùn)行奇颠,fps為0因?yàn)槟銢]用動(dòng)。
fps接近于60幀放航,那么你的app是相當(dāng)?shù)牧鲿沉揖埽?dāng)然代價(jià)是要付出很多很多,然而說這些沒有什么卵用三椿,上面看的是翻天覆地的變化缺菌,沒翻天覆地變化以為你就換換皮膚呢。
在沒有很多業(yè)務(wù)開發(fā)者搜锰,和架構(gòu)組的IOS app怎么提高性能呢伴郁?
第一:架構(gòu)方面
誰說我們app 沒有架構(gòu)了。我們可以參考MVC 蛋叼,MVVM 焊傅,MVP 等一些東西來提煉出我們自己東西。
我們網(wǎng)絡(luò)請(qǐng)求的數(shù)據(jù)可以根據(jù)每個(gè)API來創(chuàng)建一個(gè)類狈涮,這個(gè)類用來接受params 狐胎,返回json
1:比如model 數(shù)據(jù)層我們可以接收網(wǎng)絡(luò)請(qǐng)求過來的JOSN 或者XML轉(zhuǎn)化成數(shù)據(jù)模型來使用,因此這里面除了你的模型屬性字段歌馍,還應(yīng)該有一個(gè)接收json轉(zhuǎn)化model 的方法握巢。還可以實(shí)現(xiàn)你的copy協(xié)議方法,以及歸檔方法方面數(shù)據(jù)持久化松却。
2:view 負(fù)責(zé)視圖元素展示暴浦。你可以在這里面,
重寫布局
或者cell高度以及給cell上元素通過傳過來的model 賦值溅话。
注意紅線部分會(huì)觸發(fā)樓上重寫布局方法。
3:你甚至可以有一個(gè)數(shù)據(jù)持久化的類歌焦,來做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
上面導(dǎo)入的頭文件必須分組織隔開
#pragma mark - Constants Define
一些cell 的標(biāo)識(shí)符,常量定義
#pragma mark - Properties Getter And Setter
get set 方法實(shí)現(xiàn) 主要是get 方法可以在這里面做懶加載独撇,需要時(shí)候再創(chuàng)建屑墨,在內(nèi)存等方面得到優(yōu)化,我很多幾乎所有的創(chuàng)建東西都是懶加載纷铣,還在抱怨內(nèi)存和跳轉(zhuǎn)速度嗎卵史,不妨一試
#pragma mark - Controller Life Cycle
控制器生命周期
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Setup
設(shè)置界面UI 等
#pragma mark - Actions
view上觸發(fā)的事件讓控制器通知model等
下面就是很多協(xié)議方法
#pragma mark - UITableViewDelegate And UITableViewDataSource
#pragma mark - UICollectionViewDelegate And UICollectionViewDataSource
5:我們需要一個(gè)類來做一些業(yè)務(wù)邏輯的東西
比如
- (NSArray*)getAlbums;
- (void)addAlbum:(Album*)album atIndex:(int)index;
- (void)deleteAlbumAtIndex:(int)index;
這里面會(huì)導(dǎo)入網(wǎng)絡(luò)請(qǐng)求邏輯,數(shù)據(jù)存儲(chǔ)邏輯搜立,轉(zhuǎn)化model邏輯程腹。我們?cè)诳刂破髡{(diào)用這個(gè)類的頭文件API方法可以良好隔離model ,網(wǎng)絡(luò)請(qǐng)求儒拂,model ,cache等邏輯。就是下圖
也就是下圖的結(jié)構(gòu)色鸳,view上觸發(fā)一個(gè)業(yè)務(wù)邏輯比如fetch 數(shù)據(jù)顯示到views社痛。controller 調(diào)用API邏輯的fetch數(shù)據(jù)接口。然后API里面邏輯有獲取json 轉(zhuǎn)化model命雀。model的管理cache方面蒜哀。最后獲取到數(shù)據(jù)把model給view 的setModel 方法,給View展示數(shù)據(jù)吏砂。
下篇從網(wǎng)絡(luò)撵儿,緩存方面來介紹,然后數(shù)據(jù)庫(kù)狐血,多線程淀歇,UI流暢度方面介紹,代碼規(guī)范匈织,頁(yè)面布局等介紹浪默。