精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

無線客戶端框架設(shè)計(4):自定義生命周期的設(shè)計(iOS篇)

移動開發(fā) iOS
熟悉網(wǎng)站端編程的人笑了,沒錯,這種新的生命周期,就是從javascript中借鑒來的。js是一門弱語言,所以需要自定義生命周期并按部就班在不同的方法中寫不同的方法,生命周期的重新定義,或者說是擴(kuò)展,只是js代碼框架中的一個小部分。

首先要確定一點(diǎn),我們的App,要基于XIB文件進(jìn)行編程,而不是在每個相應(yīng)的ViewController里面去手動創(chuàng)建頁面的每個控件。這樣做 的好處是,將頁面布局與業(yè)務(wù)邏輯徹底隔離。于是我們可以把xib的繪制工作交給美工人員,而iOS程序員,主要關(guān)心的是業(yè)務(wù)邏輯。

有人會懷疑過多的xib會導(dǎo)致App體積變大,我曾經(jīng)有專門看過ipa文件解壓后的文件列表,我發(fā)現(xiàn)每個xib也就2k大小,而一個App最多也就 七八十個xib,那么就是說共計150k大小的樣子,由于是xml文本文件,所以壓縮后更小。而相比較下,占用App體積最多的,往往是開機(jī)畫面圖,引導(dǎo) 圖這些東西,如果真的想要App瘦身,應(yīng)該在圖片上進(jìn)行優(yōu)化,而不是不使用xib直接布局。

另一個需要明確的是,在一開始創(chuàng)建ViewController的時候,不要同時創(chuàng)建xib文件,因為這樣子的話,就在xib中把 ViewController和xib進(jìn)行關(guān)聯(lián)了,而我們要做的是解耦,這顯然不合理。所以正確的流程是,分開創(chuàng)建ViewController和 xib,不要進(jìn)行管理。在ViewController的初始化中,加載xib文件,如下所示:

接下來要做的事情,有時候連我都覺得匪夷所思。我們先來看一段代碼:

  1. #import "APageViewController.h" 
  2.  
  3. @interface APageViewController () 
  4.  
  5. @end 
  6.  
  7. @implementation APageViewController 
  8.  
  9. - (void)loadView 
  10.     [super loadView]; 
  11.     // Do any additional setup after loading the view. 
  12.  
  13.     //1.從xib中獲取View 
  14.     NSArray* list = [[NSBundle mainBundle] loadNibNamed: @"APageView" owner: self options: nil]; 
  15.     self.view = list.lastObject; 
  16.      
  17.     UILabel* nameLabel = (UILabel*)[self.view viewWithTag: 100]; 
  18.     nameLabel.text = @""
  19.      
  20.     UILabel* ageLabel = (UILabel*)[self.view viewWithTag: 200]; 
  21.     ageLabel.text = @""
  22.      
  23.     UIButton* getInfoButton = (UIButton*)[self.view viewWithTag: 300]; 
  24.     [getInfoButton addTarget: self action: @selector(getInfo) forControlEvents:UIControlEventTouchUpInside]; 
  25.      
  26.     UIButton* clearInfoButton = (UIButton*)[self.view viewWithTag: 400]; 
  27.     [clearInfoButton addTarget: self action: @selector(clearInfo) forControlEvents:UIControlEventTouchUpInside]; 
  28.  
  29. - (void) getInfo { 
  30.     UILabel* nameLabel = (UILabel*)[self.view viewWithTag: 100]; 
  31.     nameLabel.text = @"包小強(qiáng)"
  32.      
  33.     UILabel* ageLabel = (UILabel*)[self.view viewWithTag: 200]; 
  34.     ageLabel.text = @"31.6"
  35.  
  36. - (void) clearInfo { 
  37.     UILabel* nameLabel = (UILabel*)[self.view viewWithTag: 100]; 
  38.     nameLabel.text = @""
  39.      
  40.     UILabel* ageLabel = (UILabel*)[self.view viewWithTag: 200]; 
  41.     ageLabel.text = @""
  42.  
  43. - (void)dealloc { 
  44.     [super dealloc]; 
  45.  
  46. @end 

上面的代碼,是再普通不過的一段代碼,讀取一個xib,獲取到View的句柄,初始化其中的每個控件,為按鈕掛上點(diǎn)擊后的方法事件,使得按鈕變紅。 內(nèi)部還有個計數(shù)器變量,每次點(diǎn)擊按鈕都會加1。巧的是,恰好還要偵聽一個通知(Notification)。最后,調(diào)用API。

我們發(fā)現(xiàn),有2個問題:

1)在willDidLoad中做了太多的事情,又是初始化變量,又是初始化控件,又是給按鈕掛事件,注冊通知,還要調(diào)用API。

2)每次使用控件時,都要根據(jù)在xib中指定的tag重新獲取,而iOS中的控件tag值,只能是整數(shù)。

我們的解決方案是,既然頁面每次加載都會調(diào)用loadView和viewDidLoad方法,每次銷毀都會調(diào)用dealloc方法,那么干脆就在基類BaseViewController重寫了這幾個方法,于是現(xiàn)在頁面的生命周期如下所示:

201309051002.jpg

相應(yīng)的基類代碼請參見本章的源碼。

我們在每個頁面都會重寫createFields、loadData這些方法,每個方法的意義如下:

1)createFields和destroyFields: 創(chuàng)建/銷毀頁面級變量的地方。

2)createViews和destroyViews: 創(chuàng)建/銷毀頁面內(nèi)控件的地方。

3)createEvents和destroyEvents: 創(chuàng)建/銷毀頁面內(nèi)事件、通知的地方。

4)loadData: 如果頁面加載過程需要調(diào)用MobileAPI,則寫在這個地方。

我們在程序里把代碼分門別類寫在各自的地方,易于管理(避免了經(jīng)常會聲明了變量而忘記銷毀的問題)。

于是剛才的代碼文件,我們將其重構(gòu)為:

  1. #import "APageViewController.h" 
  2.  
  3. @interface APageViewController () { 
  4.     UILabel* nameLabel; 
  5.     UILabel* ageLabel; 
  6.     UIButton* getInfoButton; 
  7.     UIButton* clearInfoButton; 
  8.  
  9. @end 
  10.  
  11. @implementation APageViewController 
  12.  
  13. - (void)createFields { 
  14.  
  15.  
  16. - (void)destroyFields { 
  17.      
  18.  
  19. - (void)createViews { 
  20.     //1.從xib中獲取View 
  21.     NSArray* list = [[NSBundle mainBundle] loadNibNamed: @"APageView" owner: self options: nil]; 
  22.     self.view = list.lastObject; 
  23.      
  24.     nameLabel = (UILabel*)[self.view viewWithTag: 100]; 
  25.     nameLabel.text = @""
  26.      
  27.     ageLabel = (UILabel*)[self.view viewWithTag: 200]; 
  28.     ageLabel.text = @""
  29.      
  30.     getInfoButton = (UIButton*)[self.view viewWithTag: 300];     
  31.     clearInfoButton = (UIButton*)[self.view viewWithTag: 400]; 
  32.  
  33. - (void)destroyViews { 
  34.      
  35.  
  36. - (void)createEvents { 
  37.     [getInfoButton addTarget: self action: @selector(getInfo) forControlEvents:UIControlEventTouchUpInside]; 
  38.     [clearInfoButton addTarget: self action: @selector(clearInfo) forControlEvents:UIControlEventTouchUpInside]; 
  39.      
  40.  
  41. - (void)destroyEvents { 
  42.      
  43.  
  44. - (void)loadData { 
  45.     //在這里調(diào)用API,對于多個API的調(diào)用,參加后續(xù)章節(jié) 
  46.  
  47. - (void) getInfo { 
  48.     nameLabel.text = @"包小強(qiáng)"
  49.     ageLabel.text = @"31.6"
  50.  
  51. - (void) clearInfo { 
  52.     nameLabel.text = @""
  53.     ageLabel.text = @""
  54.  
  55. @end 

以上的代碼重構(gòu),要遵守幾個規(guī)則:

1)在createFields方法中接收從上一個頁面?zhèn)鬟f過來的參數(shù)

2)在createFields方法中初始化變量

3)將要操作的控件,都在ViewController中作為類級別的變量來聲明

3)在createViews方法中,加載xib文件,并通過Tag給控件一次性賦值

4)在createEvent方法中,為控件掛上事件方法,比如按鈕的點(diǎn)擊

5)如果有NotificationCenter,統(tǒng)一在createEvent方法中addObserver,在destroyEvent方法中removeObserver。

6)在DestroyFields方法中,釋放/銷毀所有引用型變量。

7)在DestroyViews方法中,釋放/銷毀所有控件。

所有的ViewController都這么寫,整個App整齊劃一。尤其是將一個頁面的所有控件一次性都從xib中根據(jù)tag值取出來,雖然浪費(fèi)了一些內(nèi)存,但是可以隨時隨地直接使用。

將聲明一個按鈕和為按鈕添加一個點(diǎn)擊事件方案分開在2個方法內(nèi)寫,一開始你會非常不習(xí)慣,但是當(dāng)控件多了、事件多了的時候,是一目了然的。記住,我們在做的是企業(yè)級App開發(fā),而不是小型App。

看到最后,熟悉網(wǎng)站端編程的人笑了,沒錯,這種新的生命周期,就是從javascript中借鑒來的。js是一門弱語言,所以需要自定義生命周期并按部就班在不同的方法中寫不同的方法,生命周期的重新定義,或者說是擴(kuò)展,只是js代碼框架中的一個小部分。

本章代碼下載:

YoungHeart-Chapter-04-1.zip (重構(gòu)前)

YoungHeart-Chapter-04-2.zip   (重構(gòu)后)

責(zé)任編輯:閆佳明 來源: cnblogs
相關(guān)推薦

2013-09-09 10:48:24

iOS無線客戶端框架設(shè)計

2013-09-03 09:55:42

iOS無線客戶端框架設(shè)計

2013-09-03 09:35:48

無線客戶端框架設(shè)計iOS

2013-09-16 10:43:15

無線客戶端框架設(shè)計iOSJSON

2013-09-03 09:10:56

2013-07-29 05:11:38

iOS開發(fā)iOS開發(fā)學(xué)習(xí)類的'生命周期'

2012-06-01 11:02:33

2015-07-09 15:42:48

ios應(yīng)用生命周期

2009-08-10 14:31:46

ASP.NET組件設(shè)計ASP.NET控件生命

2015-07-08 16:28:23

weak生命周期

2013-12-18 11:38:56

京東客戶生命周期大數(shù)據(jù)應(yīng)用

2022-04-19 07:20:24

軟件開發(fā)安全生命周期SSDLC應(yīng)用安全

2012-06-25 12:43:26

.NET框架

2011-03-07 13:50:20

2013-03-14 10:12:54

視覺設(shè)計產(chǎn)品設(shè)計

2009-06-11 11:28:35

JSF生命周期

2010-07-14 10:48:37

Perl線程

2011-03-21 09:45:52

Hello WorldObjective-C生命周期

2012-01-18 10:20:42

框架設(shè)計

2012-11-28 11:05:42

IBMdW
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

丁香六月综合| 日韩电影网址| 国内自拍视频一区二区三区| 亚洲第一av在线| 国产真实乱子伦| 日本www在线观看视频| 成人性色生活片| 国产精品第2页| 91精品少妇一区二区三区蜜桃臀| 黄色美女久久久| 欧美视频精品在线| 国产综合av在线| 激情在线小视频| 2021国产精品久久精品| 亚洲va码欧洲m码| 天堂а√在线中文在线新版| 在线观看免费一区二区| 亚洲午夜av电影| 国产视频久久久久久| 亚洲成人a级片| 欧美视频在线看| 毛片在线视频观看| 在线激情免费视频| 91色婷婷久久久久合中文| 亚洲free嫩bbb| 99re热视频| 亚洲精选一区| 欧美极品在线播放| 亚洲欧美精品久久| 精品av一区二区| 日韩精品欧美国产精品忘忧草 | 欧美aaaaaaa| 亚洲国产精品二十页| 久久99热只有频精品91密拍| 国产高潮流白浆喷水视频| 日本不卡高清视频| 日本精品免费一区二区三区| 日本一级淫片色费放| 欧美国产精品| 久久成年人免费电影| 久久日免费视频| 精品久久久久久久久久久aⅴ| 亚洲国产精品va在看黑人| 超碰在线超碰在线| 国产一区精品二区| 欧美一区二区三区性视频| 欧美成人三级在线播放| 欧美极品免费| 色欧美片视频在线观看在线视频| 日本在线xxx| 理论不卡电影大全神| 亚洲成人一区在线| 黄色一级片在线看| 久草免费在线视频| 久久综合给合| 亚洲国产精品久久久久蝴蝶传媒| 一区二区欧美久久| 精品人伦一区二区| 不卡一区综合视频| 日韩少妇与小伙激情| 欧美手机在线观看| 在线中文一区| 久久99热这里只有精品国产| 欧美日韩免费做爰视频| 韩日欧美一区| 97在线视频免费观看| 国产精品乱子伦| 蜜桃视频一区| 国产欧美日韩免费看aⅴ视频| 综合久久中文字幕| 精品一区二区av| 91手机在线播放| www三级免费| av不卡一区二区三区| 欧美日韩综合久久| 尤物网在线观看| 亚洲欧美日韩系列| 久久人人爽人人爽人人av| 爱啪视频在线观看视频免费| 一本到不卡精品视频在线观看| 日韩 欧美 高清| 岛国精品在线| 欧美一级黄色大片| 日本黄色动态图| 色综合咪咪久久网| 欧美精品制服第一页| 日韩美女一级片| 久久久久久久波多野高潮日日| 国产成人精品日本亚洲专区61| 中文字幕视频一区二区| 国产成人日日夜夜| 欧美日韩电影一区二区| 久热国产在线| 激情av一区二区| 99热一区二区| 麻豆成人入口| 日韩三级成人av网| av大全在线观看| 久草热8精品视频在线观看| 国产精品一级久久久| 国产黄在线看| 亚洲国产精品久久久久婷婷884| 欧美精品第三页| 欧美日本三级| 国产一区二区三区在线| 欧美日韩大片在线观看| 日产欧产美韩系列久久99| 91手机在线播放| 亚洲视频tv| 欧美日韩性视频| 人妻换人妻仑乱| 欧美日中文字幕| 97热在线精品视频在线观看| 久久久久久久久电影| 三级视频网站在线观看| 99久久久久国产精品| 8x拔播拔播x8国产精品| 国产三级在线观看视频| 日本一区二区三区免费乱视频 | 免费看污黄网站在线观看| 亚洲综合中文| 国产欧美精品一区二区三区-老狼| 色婷婷中文字幕| 中文字幕在线观看不卡| 免费在线观看的毛片| 欧美三级电影在线| 欧美激情精品久久久久久免费印度| 亚洲一级视频在线观看| 国产午夜精品一区二区三区四区| 丁香花在线影院观看在线播放| 精品视频国内| 久久久99久久精品女同性| 日日夜夜狠狠操| 91一区二区在线观看| 中文字幕人妻熟女人妻洋洋| 国产电影一区二区| 久久久精品网站| 国产精品爽爽久久| 中文字幕一区二区三区四区| 国产三级三级三级看三级| 亚洲理论电影| 欧美中文在线免费| 香蕉久久一区二区三区| 激情成人在线视频| www.超碰97| 国产日韩一区二区三区在线播放 | 91精品精品| 成人午夜黄色影院| 瑟瑟视频在线| 欧美精品v国产精品v日韩精品 | 国产激情视频网站| 亚洲在线国产日韩欧美| 久久伦理网站| 3d欧美精品动漫xxxx无尽| 国产午夜精品全部视频在线播放 | 亚洲欧美日韩中文视频| 久久久久99精品成人片我成大片| 91丝袜国产在线播放| aaa毛片在线观看| 不卡视频在线| 91在线观看欧美日韩| 中国av在线播放| 精品国产乱码久久| 日产精品久久久| 国产人久久人人人人爽| 狠狠干狠狠操视频| 中文字幕一区二区三区欧美日韩| 亚洲字幕在线观看| cao在线视频| 亚洲免费伊人电影在线观看av| 亚洲毛片一区二区三区| 国产精品福利影院| 国产精品91av| 香蕉国产精品偷在线观看不卡| 欧美日韩国产三区| 91精品网站在线观看| 欧美俄罗斯性视频| 国产色在线 com| 欧美一级一区二区| 国产情侣在线视频| 久久久精品tv| 在线免费视频a| 亚洲综合中文| 欧美视频观看一区| 国产一区二区三区精品在线观看 | 99精品一区二区三区的区别| 日韩中文字幕在线一区| 91wwwcom在线观看| 岛国中文字幕在线| 日韩精品亚洲精品| 国产老妇伦国产熟女老妇视频| 亚洲永久免费视频| 国产综合精品在线| 国产精品66部| www日韩在线观看| 欧美日韩国内| 五月天国产一区| 国产精品网在线观看| 国产精品综合久久久| av日韩中文| 麻豆国产va免费精品高清在线| 天天色综合久久| 91精品久久久久久久久99蜜臂| 在线观看精品国产| 亚洲高清在线一区| 综合婷婷亚洲小说| 免费中文字幕av| 国产毛片一区二区| 婷婷丁香激情网| 亚洲人成久久| 中文字幕色呦呦| 欧美一区二区三区激情视频| 激情一区二区三区| 精品国产第一国产综合精品| 国产999精品久久久| av福利在线导航| 精品国内产的精品视频在线观看| 国产一级网站视频在线| 日韩av在线看| 亚洲精品一区二区三区不卡| 欧美区一区二区三区| 亚洲欧美另类在线视频| 午夜国产精品影院在线观看| 久久久久成人网站| 综合久久给合久久狠狠狠97色| 色欲av无码一区二区三区| www.亚洲国产| 亚洲天堂美女视频| 国产·精品毛片| 日本亚洲一区二区三区| 韩国欧美国产1区| 一女二男3p波多野结衣| 日日摸夜夜添夜夜添亚洲女人| 日韩欧美一区二| 伊人久久大香线蕉av超碰演员| 青青草免费在线视频观看| 婷婷丁香综合| 欧美日韩在线免费观看视频| 日韩片欧美片| 久久免费视频2| 911精品美国片911久久久| 一区二区三区四区免费视频| 日韩在线精品| 一区二区日本伦理| 91久久高清国语自产拍| 久久免费视频2| 欧美日韩国产欧| 亚洲国产成人精品无码区99| 在线成人h网| 欧美亚洲精品一区二区| 亚洲一区欧美二区| 黄色a级片免费| 日韩精品一二三区| 日本xxxx黄色| 狠狠色狠狠色合久久伊人| 看看黄色一级片| 国产精品白丝jk黑袜喷水| 国产欧美一区二| 成人一二三区视频| 久久中文字幕人妻| 国产欧美视频在线观看| 黄色裸体一级片| 一区二区三区在线看| 久久精品久久国产| 一本色道久久综合精品竹菊| 一级特黄免费视频| 欧美丰满一区二区免费视频| 亚洲男人第一天堂| 精品在线观看国产| 在线国产91| 欧美精品videofree1080p| 麻豆蜜桃在线观看| 国产精品久久久久久网站 | 一本久久知道综合久久| 北条麻妃在线视频观看| 蜜臀av一区二区在线观看| 亚洲第一天堂久久| 97精品久久久午夜一区二区三区 | 91在线|亚洲| 日韩精品免费一区二区三区竹菊| 日韩一区免费观看| 在线一区电影| wwwxxx黄色片| 国产一区二区福利| 野花社区视频在线观看| 中文字幕不卡在线观看| 国产小视频在线看| 91久久精品日日躁夜夜躁欧美| 国产视频一区二区三| 日韩精品视频三区| 浪潮av一区| 2024亚洲男人天堂| 亚洲人体在线| 欧美在线日韩精品| 黄页网站一区| 中文字幕av不卡在线| 不卡一区二区三区四区| 国产视频精品免费| 色综合久久久久综合99| 亚洲精品一区二区口爆| 日韩视频中文字幕| 欧美男女交配| 国产伦精品一区二区三毛| 日韩久久电影| 蜜臀av午夜一区二区三区| 成人精品电影在线观看| 日韩欧美123区| 欧美日韩在线播放一区| 青春有你2免费观看完整版在线播放高清| 久久激情视频久久| 欧美色片在线观看| 黄色一区三区| 亚洲福利精品| 国模私拍视频在线观看| 国产亚洲欧洲997久久综合| 日韩免费一级片| 精品美女被调教视频大全网站| 午夜视频在线免费观看| 国产精品精品视频一区二区三区| 日本欧美三级| 国产中文字幕二区| 成人av手机在线观看| 中文字幕另类日韩欧美亚洲嫩草| 欧美少妇bbb| 国产二区视频在线观看| 国产91露脸中文字幕在线| 日韩电影不卡一区| 欧美色图另类小说| av网站免费线看精品| 日本污视频在线观看| 亚洲国产天堂久久国产91| 国产理论电影在线| 成人av播放| 亚洲无毛电影| 性高潮免费视频| 夜夜精品视频一区二区| 亚洲男女视频在线观看| 欧美精品电影免费在线观看| 成人午夜大片| 久久99中文字幕| av一区二区三区在线| 韩国av免费观看| 亚洲欧美另类在线观看| 精品网站在线| 午夜欧美性电影| 韩国女主播成人在线| 国产又粗又硬又长又爽| 91精品国产欧美一区二区18| av免费看在线| 国产精品香蕉视屏| 夜夜爽av福利精品导航| 成都免费高清电影| 欧美日韩一区二区三区视频| 日本在线免费| 91久色国产| 亚洲精品婷婷| 久久久久久久毛片| 欧美久久久久免费| 欧美xxxx黑人又粗又长| 国产伦精品一区二区三区免费视频 | 国产精品成人国产乱| 日韩精品免费看| 高清亚洲高清| 国产精品久久久影院| 国产999精品久久| 国产农村妇女aaaaa视频| 中文字幕在线成人| 久久丁香四色| 青青草原成人网| 一区在线观看免费| 亚洲国产成人在线观看| 热门国产精品亚洲第一区在线| 成人一区二区| jjzz黄色片| 欧美视频自拍偷拍| 日本片在线看| 日韩欧美亚洲日产国| 国产乱码字幕精品高清av | 美女视频一区在线观看| 国产盗摄x88av| 日韩精品亚洲精品| 成人豆花视频| 久久久久人妻精品一区三寸| 国产日产欧美一区| www.黄色小说.com| 国产91色在线播放| 女人天堂亚洲aⅴ在线观看| 91精彩刺激对白露脸偷拍| 91精品久久久久久蜜臀| 国产欧美一区二区三区精品酒店| 裸体大乳女做爰69| 91麻豆国产在线观看| av一级黄色片| 国产精品成人观看视频国产奇米| 欧美激情在线| 亚洲综合久久av一区二区三区| 亚洲国产精品电影| 欧美1区2区3| 欧美伦理片在线观看| 狠狠色香婷婷久久亚洲精品|