<轉(zhuǎn)>Java轉(zhuǎn)iOS-第一個項目總結(jié)(2):遇到問題和解決方案

目錄

1.UITableView滑動卡頓的優(yōu)化

2.右滑手勢返回

3.添加頁面統(tǒng)計

4.debug版和release版

5.關(guān)于頁面刷新

6.關(guān)于頁面布局

7.推薦博客

遇到問題和解決方案

本文是Java轉(zhuǎn)iOS-第一個項目總結(jié)(1)?的內(nèi)容補充路幸,分析遇到的一些問題和解決方案简肴,分享一些收獲。

1.UITableView滑動卡頓的優(yōu)化

因為 `UITableView`的cell中有很多圖片能扒,在4/4s上滑動比較卡初斑,最開始覺得是機器太老了,但是對比微信和QQ空間频蛔,發(fā)現(xiàn)還是我們的問題,所以后期進行了優(yōu)化瀑粥,通過xcode的性能監(jiān)控狞换,內(nèi)存變化不大修噪,但是cpu飆升的倆厲害,通過xcode的Time Profiler工具進行了監(jiān)控(Product—Profile—Time Profiler)樊销,找到了執(zhí)行比較慢的方法围苫,原因是轉(zhuǎn)換圖片路徑的時候撤师,調(diào)用自己的方法進行了log打印,造成滑動卡頓腺占。

網(wǎng)上關(guān)于UITableView的性能優(yōu)化的文章有很多衰伯,官方給了一個例子LazyTableImages介紹懶加載UITableview的Image,在滑動的時候嚎研,不加載圖片临扮,停止滑動時再加載圖片杆勇,并把UIImage放在對象中蚜退,判斷對象中圖片不會空則顯示圖片,否則還是占位圖蚂且。例子中圖片都是app的icon杏死,都是小圖淑翼,所以那樣做也沒問題品追。但是我們項目中的圖片都是大圖片肉瓦,如果把圖片放在對象中风宁,顯然不合適,所以當(dāng)時pass了這個方案热监。

前幾天在Glow 技術(shù)團隊博客看到了UIScrollView 實踐經(jīng)驗

這篇博客孝扛,里面講到了相同的技術(shù)苦始,優(yōu)化了滑動減速過程中也進行圖片加載陌选,另外用到了SDWebImage,里面判斷SDWebImage是否緩存過圖片您炉,如果緩存過赚爵,從本地加載圖片冀膝,否則使用占位圖,應(yīng)該是比較好的解決方案了

2.右滑手勢返回

iOS7自帶了這個功能窝剖,后來設(shè)計人員提出了優(yōu)化建議枯芬,但我們的程序卻不能支持這個功能,原因程序返回操作的方法包含其它業(yè)務(wù)邏輯蒜埋,比如返回后刷新上一頁面的數(shù)據(jù)整份,返回后是否顯示底部菜單烈评。而系統(tǒng)的默認的右滑返回讲冠,只是做了頁面返回竿开,并不會觸發(fā)自己的返回方法否彩。

所以為了這個功能還是代碼進行了修改列荔,更新上級頁面的操作放在本頁面數(shù)據(jù)刷新的地方贴浙。底部菜單只在首頁的幾個頁面顯示隱藏呜舒,其它去掉相關(guān)業(yè)務(wù)邏輯袭蝗。因為改這個地方還和測試起了沖突到腥,因為項目臨近收尾乡范,修改可能會帶來問題晋辆,優(yōu)化的功能可以放在后期瓶佳。但是作為開發(fā)人員還是進行了修改,加班進行了測試鳞青。表面上看這是個優(yōu)化霸饲,其實卻是問題暴漏。如果有新需求的可以不做臂拓,但是有問題卻應(yīng)該盡早解決厚脉。

另外這個地方做個內(nèi)容補充,頁面之間的逆向數(shù)據(jù)傳遞胶惰,可以用回調(diào)(block)傻工、委托(delegate)和通知(notifacation),需要熟練掌握這幾個知識點以及實現(xiàn)方法孵滞,區(qū)分之間的差別精钮。

3.添加頁面統(tǒng)計

友盟統(tǒng)計還是比較強大的,雖然項目沒有要求加相關(guān)功能剃斧,但是還是加了相關(guān)統(tǒng)計幼东,需要在對應(yīng)ViewController中的viewWillAppear和viewWillDisappear中加入一行代碼糟秘,傳入當(dāng)前頁面的名字,最開始只加了幾個頁面,所以代碼是寫死的。全部頁面要加統(tǒng)計,需要對代碼進行了改進,封裝在自己BaseViewController中

1

2

3

4

5

6

7

8-(void)beginLogPageView

{

[MobClick?beginLogPageView:NSStringFromClass([self?class])];

}

-(void)endLogPageView;

{

[MobClick?endLogPageView:NSStringFromClass([self?class])];

}

在子頁面中調(diào)用統(tǒng)計就比較簡單了

1

2

3

4

5

6

7

8

9

10-(void)viewWillAppear:(BOOL)animated{

[superviewWillAppear:animated];

//添加頁面統(tǒng)計

[self?beginLogPageView];

}

-(void)viewWillDisappear:(BOOL)animated{

[superviewWillDisappear:animated];

//結(jié)束頁面統(tǒng)計

[self?endLogPageView];

}

Method Swizzling和 AOP實踐里面提供了更高大上的解決方案迁筛,順便可以學(xué)習(xí)OC的runtime筒占。

在Java領(lǐng)域中这橙,Spring框架以IOC和AOP著稱,所以語言和涉及里面都是想通的止毕。雖然作為io是新手谨朝,但是我是懂AOP的_妹窖。

4.debug版和release版

之前自己對于debug版和release版沒有太多概念,只是知道平時開發(fā)的時候是debug版隅茎,當(dāng)要發(fā)布的時候改成release版堂竟,看到一些宏定義税稼,根據(jù)不同版本設(shè)置不同的宏扰肌,比如debug版的時候,NSLog可以輸出,release的時候不輸出进倍。

前段時間,看到一篇Xcode宏定義選項以及Release版去NSLog的文章時贴见,就想明白了档悠,在xcode中可以設(shè)置宏奴烙,debug下有個默認設(shè)置 debug=1,所以

1

2

3

4

5#if?DEBUG

#warning?NSLogs?will?be?shown

#else

#define?NSLog(...)?{}

#endif

應(yīng)該就是判斷這個值

在之前的JavaWeb項目中擎宝,我們會使用Maven進行項目管理胃碾,在Maven的pom.xml可以添加profiles,配置不同的版本奔脐,比如開發(fā)版,測試版竖般,生產(chǎn)版涣雕,不同版本下有不同的配置文件迄埃,比如數(shù)據(jù)庫連接,log配置等,打包編譯項目時可以通過Maven選擇不同的版本叠赦。這樣的好處是切換版本的時候仗岸,不用修改相關(guān)帶代碼,避免出現(xiàn)不必要的錯誤熔号。

轉(zhuǎn)iOS后一直在找相關(guān)的解決方案稽鞭,后來才意識到這個就可以做到,只不過蘋果里面只有debug版和release版引镊,沒辦法自定義新的版本(或者是我還沒找到朦蕴,請大神賜教),但是也可以進行相關(guān)配置弟头,保證release版的配置都是正確的

另外補充一下吩抓,在C/C++中重復(fù)引用頭文件會出錯,所以頭文件引用的時候可以使用下面方法赴恨,自定義頭文件的引用名疹娶,xcode生成頭文件的時候也會默認加上這個

1

2

3#ifndef?xxxx

#define?xxxx

#endif

所以就會引起一個疑問,自己平時在程序中如果不是這樣引用頭文件伦连,是否會引起沖突雨饺,網(wǎng)上搜索給出答案。oc中不推薦#include引用頭文件惑淳,推薦使用#import就是可以解決這個問題的额港。

5.關(guān)于頁面刷新

一個頁面,可能包括下拉刷新汛聚,上拉加載更多锹安,翻頁到最后時隱藏刷新短荐,沒網(wǎng)下從緩存中加載數(shù)據(jù)等多種情況倚舀,所以頁面刷新的功能最好提前考慮到叹哭,否則這些功能在后期修改時會變得很麻煩,一不小心就容易出問題痕貌。比如翻頁到最后隱藏加載更多风罩,然后下拉刷新的時候,可能需要把隱藏的控件給顯示出來舵稠。所以代碼要考慮好超升,設(shè)計好,封裝好哺徊。

6.關(guān)于頁面布局

現(xiàn)在的iOS教程室琢,大部分講得都是故事板,但是在實際項目中落追,更多的還是用代碼盈滴。

唐巧的博客StoryBoard–看上去很美中說明了原因,公司項目多是協(xié)同開發(fā)轿钠,一旦兩個人同時修改了故事板巢钓,基本上都會產(chǎn)生沖突,解決起來會非常麻煩疗垛,所以作為新手還是應(yīng)該多學(xué)習(xí)純代碼開發(fā)症汹。之前項目使用的就是代碼寫UI,獲得屏幕寬高贷腕,在不同控件之間算坐標背镇,如果代碼不規(guī)范,控件的坐標和寬高是獨立的,如果一個控件發(fā)生變化花履,就會產(chǎn)生雪崩芽世。

這里推薦Masonry,也是github上非常有名的一個iOS組件诡壁,解決了自動布局寫約束麻煩且繁瑣的缺點济瓢,比較容易學(xué)習(xí)和令人接受。iOS還有個VFL語言妹卿,相比還是Masonry感覺更好旺矾。

這里再推薦一個iOS組件--ReactiveCocoa,是一個kvo組件夺克,用來做消息監(jiān)聽箕宙,效果就是可以像Java寫事件監(jiān)聽一樣寫OC代碼 。之前給一個UIButton綁定事件铺纽,需要調(diào)用addTarget綁定柬帕,然后再寫一個方法,或者監(jiān)聽UITextFiled的變化,都要寫很多委托方法陷寝。使用ReactiveCocoa后锅很,寫法就大變了,代碼看起來會整潔很多凤跑,而且顯得比較高大上一點爆安。

現(xiàn)在新的項目中,添加使用了上面兩個組件仔引。

7.推薦博客

唐巧的技術(shù)博客扔仓,最早因為不知道唐巧被同事鄙視了下,從他的博客中可以看到iOS的變化咖耘,作者也是從Java轉(zhuǎn)的iOS翘簇,博客也是通俗易懂,現(xiàn)在博主自己創(chuàng)業(yè)雖然不寫博客了儿倒,但是會發(fā)周報分享比較好博文和開源項目缘揪。

Glow 技術(shù)團隊博客,雖然里面就幾篇博文义桂,但都比較有用找筝,而且是屬于進階提升型的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慷吊,一起剝皮案震驚了整個濱河市袖裕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌溉瓶,老刑警劉巖急鳄,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異堰酿,居然都是意外死亡疾宏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門触创,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坎藐,“玉大人,你說我怎么就攤上這事哼绑⊙意桑” “怎么了抖韩?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵蛀恩,是天一觀的道長。 經(jīng)常有香客問我茂浮,道長双谆,這世上最難降的妖魔是什么壳咕? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮顽馋,結(jié)果婚禮上囱井,老公的妹妹穿的比我還像新娘。我一直安慰自己趣避,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布新翎。 她就那樣靜靜地躺著程帕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪地啰。 梳的紋絲不亂的頭發(fā)上愁拭,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音亏吝,去河邊找鬼岭埠。 笑死,一個胖子當(dāng)著我的面吹牛蔚鸥,可吹牛的內(nèi)容都是我干的惜论。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼止喷,長吁一口氣:“原來是場噩夢啊……” “哼馆类!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起弹谁,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤乾巧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后预愤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沟于,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年植康,在試婚紗的時候發(fā)現(xiàn)自己被綠了旷太。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡销睁,死狀恐怖泳秀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情榄攀,我是刑警寧澤嗜傅,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站檩赢,受9級特大地震影響吕嘀,放射性物質(zhì)發(fā)生泄漏违寞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一偶房、第九天 我趴在偏房一處隱蔽的房頂上張望趁曼。 院中可真熱鬧,春花似錦棕洋、人聲如沸挡闰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摄悯。三九已至,卻和暖如春愧捕,著一層夾襖步出監(jiān)牢的瞬間奢驯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工次绘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瘪阁,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓邮偎,卻偏偏與公主長得像管跺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子禾进,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容