任靖娟
手機(jī)端聊天工具的設(shè)計(jì)與實(shí)現(xiàn)
任靖娟
針對(duì)如何在IOS平臺(tái)創(chuàng)建即時(shí)通訊軟件,使用object-c語(yǔ)言在xcode上編寫(xiě)和調(diào)試IOS程序,接下來(lái)xmpp框架的導(dǎo)入和各種效果的實(shí)現(xiàn),最后,介紹了程序的設(shè)計(jì)思路和模式(如MVC模式)。
IOS openfire XMPP ASIHttpRequest 通訊
隨著智能手機(jī)的問(wèn)世,人們不再僅限于使用手機(jī)的短信和通話(huà)功能。人們開(kāi)始傾向于使用手機(jī)軟件來(lái)通信,于是實(shí)時(shí)通信軟件不斷被開(kāi)發(fā)和優(yōu)化。實(shí)時(shí)通信軟件比短信服務(wù)(SMS)更加方便和實(shí)用,因此人們更加喜歡用通信軟件進(jìn)行通信[1]。
下面介紹怎樣用Objective-C語(yǔ)言來(lái)實(shí)現(xiàn)基于iPhone端的實(shí)時(shí)通訊軟件,使用當(dāng)前最流行的UI設(shè)計(jì)元素,而且有良好的功能實(shí)現(xiàn)和用戶(hù)體驗(yàn)。
系統(tǒng)設(shè)計(jì)的任務(wù)是設(shè)計(jì)軟件系統(tǒng)的模塊層次結(jié)構(gòu),設(shè)計(jì)數(shù)據(jù)庫(kù)的結(jié)構(gòu)以及設(shè)計(jì)模塊的控制流程。此軟件主要采用MVC的設(shè)計(jì)模式,把所有的邏輯分別歸類(lèi)到M:模型V:視圖C:控制器中,使整個(gè)程序更加明晰。
1.1 系統(tǒng)功能分析
在這個(gè)過(guò)程中服務(wù)器端數(shù)據(jù)庫(kù)要及時(shí)準(zhǔn)確地存儲(chǔ)、檢索相應(yīng)的數(shù)據(jù),該軟件的需求如下:
(1)注冊(cè):把用戶(hù)名和密碼傳給服務(wù)器,服務(wù)器存入數(shù)據(jù)庫(kù);
(2)登陸:把用戶(hù)名密碼傳給服務(wù)器,服務(wù)器進(jìn)行匹配,返回結(jié)果;
(3)顯示聯(lián)系人:從服務(wù)器獲取當(dāng)前在線(xiàn)聯(lián)系人,返回到客戶(hù)端,得到數(shù)據(jù)后填充到界面上;
(4)添加好友:發(fā)送當(dāng)前用戶(hù)的用戶(hù)名,服務(wù)器把數(shù)據(jù)存到自己好友的表中;
(5)好友列表:從服務(wù)器得到好友的數(shù)據(jù),服務(wù)器遍歷好友表,返回結(jié)果;
(6)發(fā)送消息:當(dāng)用戶(hù)在線(xiàn)時(shí)把消息發(fā)送到服務(wù)器,服務(wù)器轉(zhuǎn)發(fā)給聯(lián)系人;
(7)收到信息:當(dāng)服務(wù)器收到消息,消息中帶有目的位置,服務(wù)器把消息轉(zhuǎn)發(fā)到目的位置;
(8)消息記錄:發(fā)送的消息和收到的消息被及時(shí)的存入到了數(shù)據(jù)庫(kù),可以實(shí)現(xiàn)聊天記錄的查看;
(9)刷新:當(dāng)下拉列表時(shí)調(diào)用下拉方法,再次請(qǐng)求服務(wù)器,知道得到數(shù)據(jù)后收起加載頁(yè)面,使得第一條數(shù)據(jù)永遠(yuǎn)是最新的數(shù)據(jù);
(10)注銷(xiāo):點(diǎn)擊注銷(xiāo),調(diào)用下線(xiàn)的方法,斷開(kāi)連接。1.2 系統(tǒng)功能結(jié)構(gòu)
該系統(tǒng)分別部署到兩臺(tái)服務(wù)器上,一個(gè)數(shù)據(jù)服務(wù)器一個(gè)聊天服務(wù)器。數(shù)據(jù)服務(wù)器存儲(chǔ)用戶(hù)登陸的信息和相關(guān)內(nèi)容,聊天服務(wù)器完成聊天數(shù)據(jù)的轉(zhuǎn)發(fā)C/S (Client/Server,客戶(hù)端/服務(wù)器)[2]結(jié)構(gòu),即客戶(hù)機(jī)和服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過(guò)它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到Client端和Server端來(lái)實(shí)現(xiàn),降低了系統(tǒng)的通訊開(kāi)銷(xiāo)。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是Client/Server形式的兩層結(jié)構(gòu),由于現(xiàn)在的軟件應(yīng)用系統(tǒng)正在向分布式的 Web應(yīng)用發(fā)展,Web和Client/Server應(yīng)用都可以進(jìn)行同樣的業(yè)務(wù)處理,應(yīng)用不同的模塊共享邏輯組件;因此,內(nèi)部的和外部的用戶(hù)都可以訪(fǎng)問(wèn)新的和現(xiàn)有的應(yīng)用系統(tǒng),通過(guò)現(xiàn)有應(yīng)用系統(tǒng)中的邏輯可以擴(kuò)展出新的應(yīng)用系統(tǒng)。這也就是目前應(yīng)用系統(tǒng)的發(fā)展方向。本軟件采用了C/S設(shè)計(jì)結(jié)構(gòu),客戶(hù)端主要功能圖列出了客戶(hù)端的主要功能。如圖1所示:
圖1 客戶(hù)端主要功能圖
注冊(cè)功能:用戶(hù)在移動(dòng)設(shè)備上點(diǎn)擊軟件圖標(biāo)后進(jìn)入當(dāng)前程序頁(yè)面,進(jìn)入主界面后,如果已有賬號(hào)則可直接點(diǎn)擊登陸,如果沒(méi)有賬號(hào),點(diǎn)擊登陸頁(yè)面后,會(huì)出現(xiàn)注冊(cè)按鈕,點(diǎn)擊注冊(cè)按鈕輸入用戶(hù)名和密碼系統(tǒng)會(huì)提示注冊(cè)成功或失敗,如果提示成功則注冊(cè)成功,如果失敗則提示注冊(cè)失敗。
登陸功能:如果已有賬號(hào)輸入用戶(hù)名密碼以完成登陸操作,如果沒(méi)有賬號(hào),注冊(cè)成功后,注冊(cè)的用戶(hù)名和密碼會(huì)留在輸入框中,直接點(diǎn)擊登陸按鈕即可完成登錄,點(diǎn)擊登錄按鈕以后系統(tǒng)會(huì)提示成功或失敗,如果登陸成功系統(tǒng)跳進(jìn)主界面如果失敗系統(tǒng)提示登陸失敗。
朋友功能:朋友界面是用戶(hù)在發(fā)現(xiàn)頁(yè)面中添加的好友都會(huì)顯示在朋友頁(yè)面,當(dāng)點(diǎn)擊任意一行,即可與當(dāng)前聯(lián)系人進(jìn)行聊天。
發(fā)現(xiàn)功能:發(fā)現(xiàn)界面中的數(shù)據(jù)都是來(lái)自openfire數(shù)據(jù)庫(kù)中的ofuer表[3],里面存了所有的注冊(cè)用戶(hù),當(dāng)點(diǎn)擊發(fā)現(xiàn)時(shí)客戶(hù)端請(qǐng)求服務(wù)器,服務(wù)器返回當(dāng)前在線(xiàn)的用戶(hù),
消息功能:當(dāng)和朋友發(fā)生聯(lián)系后,所有的聊天數(shù)據(jù)都會(huì)存入到消息界面。
注銷(xiāo)功能:點(diǎn)擊注銷(xiāo)按鈕后,系統(tǒng)會(huì)退出登錄狀態(tài)。
服務(wù)器主要功能圖,列出了服務(wù)器端的主要功能,如圖2 所示:
圖2 服務(wù)器主要功能圖
(1)tomcat服務(wù)器:tomcat服務(wù)器主要完成業(yè)務(wù)數(shù)據(jù)的操作,把圖片和用戶(hù)名、密碼存入數(shù)據(jù)庫(kù),并把存用戶(hù)名和密碼的表中的數(shù)據(jù)復(fù)制到openfire數(shù)據(jù)庫(kù)中的ofuser表中。
(2)Openfire服務(wù)器:openfire服務(wù)器主要完成聊天數(shù)據(jù)的轉(zhuǎn)發(fā),這種數(shù)據(jù)服務(wù)器和聊天服務(wù)器分開(kāi)設(shè)計(jì)從而實(shí)現(xiàn)了高并發(fā)量。
(3)當(dāng)用戶(hù)發(fā)送消息數(shù)據(jù)會(huì)存到hacpi的message表中,
(4)當(dāng)用戶(hù)登錄時(shí),post用戶(hù)名和密碼到openfire服務(wù)器,當(dāng)驗(yàn)證通過(guò)后,調(diào)用xmpp的已通過(guò)驗(yàn)證的代理方法。
2.1 Xmpp框架導(dǎo)入IOS工程
(1)從github下載xmpp[4]框架導(dǎo)入工程,如圖3所示:
圖3 導(dǎo)入工程圖
選中的文件拖入工程中,其中Extension中的模塊可以選擇添加(只添加當(dāng)前工程需要的模塊)xmppframework設(shè)計(jì)是模塊化的,包括核心和擴(kuò)展,第三方開(kāi)發(fā)人員可以方便的添加自己的擴(kuò)展實(shí)現(xiàn);同時(shí)開(kāi)發(fā)人員也只需要添加自己工程需要的模塊。一般擴(kuò)展都會(huì)依賴(lài)一些額外的包, 要注意同時(shí)添加進(jìn)去。
(2)添加framework 選擇工程/選擇Build Phases/Link Binary With Libraries點(diǎn)加號(hào)添加,需要添加的庫(kù)包括(注意根據(jù)你添加的模塊不同,可能需要添加的庫(kù)不一樣)如圖4所示:
圖4 鏈接庫(kù)圖
(3)添加一個(gè)搜索路徑如圖5所示:
圖5 引用文件路徑圖
(4)創(chuàng)建 xmpp對(duì)象并實(shí)現(xiàn)它的代理方法,初始化xmppStream 設(shè)置xmppStream的deleagte實(shí)現(xiàn)goOnLine方法完成在線(xiàn)狀態(tài)的發(fā)送,實(shí)現(xiàn)goOffLine方法完成下線(xiàn)方法的發(fā)送。實(shí)現(xiàn)connect方法從本地獲取用戶(hù)名、密碼和服務(wù)器地址,通過(guò)xmppStream的setMyJID方法設(shè)置用戶(hù)名,通過(guò)setHostName方法設(shè)置服務(wù)器地址,連接服務(wù)器如果成功返回yes,連接服務(wù)器后會(huì)調(diào)用xmppStreamDelegate的方法xmppStreamDidConnect連接服務(wù)器,如果成功電泳驗(yàn)證方法,如果驗(yàn)證成功調(diào)用xmppStreamDidAuthenticate,驗(yàn)證通過(guò)后即可調(diào)用上線(xiàn)的方法上線(xiàn),上線(xiàn)后即可發(fā)送消息和收到消息[5]。
2.2 FMdataBase
FMDB框架其實(shí)只是一層很薄的封裝,主要的類(lèi)也就兩個(gè):FMDatabase和FMResultSet[6]。
(1)首先,得實(shí)例化一個(gè) FMDatabase對(duì)象,這跟Sqlitepersistentobjects 派生一個(gè)子類(lèi)進(jìn)行操作是不同。接著打開(kāi)一個(gè)數(shù)據(jù)庫(kù)(如果沒(méi)有會(huì)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)),paths:ios下Document路徑,Document為中ios可讀寫(xiě)的文件夾,創(chuàng)建數(shù)據(jù)庫(kù)實(shí)例 db 這里說(shuō)明下:如果路徑中不存在“Test.db”的文件,sqlite會(huì)自動(dòng)創(chuàng)建“Test.db”。
(2)接下來(lái),我們可以通過(guò)這個(gè)數(shù)據(jù)庫(kù)對(duì)象進(jìn)行操作了。操作主要是update和queries。
(3)這樣我們就有了一張表了。接下我們對(duì)表進(jìn)行操作。插入數(shù)據(jù)!注意插入的數(shù)據(jù)使用了通配符,這跟 iphone直接使用sqlite借口的綁定變量是一樣的,后面的通配符匹配的數(shù)據(jù)。
(4)把數(shù)據(jù)存入數(shù)據(jù)庫(kù)中,插入數(shù)據(jù)庫(kù)中。(5)對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢(xún)操作。
2.3 SBJson的使用
SBJson是Objective-C實(shí)現(xiàn)的一個(gè)JSON解析器和生成器。JSON是一種數(shù)據(jù)交換語(yǔ)言,和XML是同樣用途的。不過(guò)JSON的體積要比XML小,也就意味著在網(wǎng)絡(luò)傳輸中速度會(huì)比XML更快。
JSON(JavaScriptObject Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式[7]。它基于 JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個(gè)子集。 JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是,也使用了類(lèi)似于C語(yǔ)言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成。
在項(xiàng)目如果要解析json字符串需要?jiǎng)?chuàng)建json對(duì)象,調(diào)用objectWithString:方法完成json串的轉(zhuǎn)換。
2.4 自定義Cell的使用
創(chuàng)建一個(gè)UITableViewCell的子類(lèi)[8]:選中Custom Cell目錄,依次選擇File/New /New File,在彈出的窗口,左邊選擇Cocoa Touch,右邊選擇Objective-C class,單擊Next,輸入類(lèi)名CustomCell,Subclass of選擇UITableViewCell,之后選擇 Next和 Create,就建立了兩個(gè)文件:CustomCell.h和CustomCell.m。
(1)創(chuàng)建CustomCell.xib:依次選擇File/New/New File,在彈出的窗口,左邊選擇User Interface,右邊選擇Empty,單擊Next,選擇iPhone,再單擊Next,輸入名稱(chēng)為CustomCell,選擇好位置,單擊Next,選擇iPhone,再單擊Next,輸入名稱(chēng)為CustomCell,選擇好位置,拖拽自己想要的控件。
打開(kāi)CustomCell.h,添加屬性,打開(kāi)CustomCell.m,向其中添加代碼。
設(shè)置重用標(biāo)志,使得cell可以重用。
在表的代理方法里創(chuàng)建cell對(duì)象,并對(duì)視圖賦值。
本程序中用到的自定cell的類(lèi)都放在了cell文件夾里,里面是所有要用的cell,自定義cell可以讓用于看到不同形式的表視圖,增加了內(nèi)容的閱讀行,使得 ui多樣化,能使整個(gè)程序更加美觀。
3.1 編碼風(fēng)格
本軟件的編碼風(fēng)格嚴(yán)格按照 Objective-C[9]的編碼規(guī)范,并注意編寫(xiě)時(shí)的細(xì)節(jié),增加代碼的清晰度和易讀性。
(1)類(lèi)名:
①所有的類(lèi)名均以大寫(xiě)字母開(kāi)頭,多單詞組合時(shí),后面的單詞首字母大寫(xiě),類(lèi)是有意義的。使用駝峰命名法,方法名全部都有特定的涵義和目的,參數(shù)和方法都有注釋。
②所有繼承自系統(tǒng)的某類(lèi)則用某類(lèi)的名字作為結(jié)尾。例如繼承自 UIView 的類(lèi)以 View 結(jié)尾,繼承自ViewController[10]的類(lèi)以viewController結(jié)尾,表示是視圖控制器。
③所有保存數(shù)據(jù)的實(shí)體以 object結(jié)尾,并放在 model文件夾中。
(2)常量:
所有的常用數(shù)據(jù)都進(jìn)行了宏定義,放在了預(yù)編譯頭文件中,當(dāng)某個(gè)類(lèi)中需要用到的時(shí)候,直接調(diào)用宏就行。在Define中相類(lèi)似的定義要對(duì)齊。如:
(3)變量:
①變量必須起有意義的名字,使其他組員可以很容易讀懂變量所代表的意義,變量命名可以采用同義的英文命名,可使用幾個(gè)英文單詞,第一個(gè)單詞首字母小寫(xiě),其他單詞首字母大寫(xiě)。
例如:NSString *username;
②對(duì)于一些特殊類(lèi)型的變量,命名時(shí)要帶上類(lèi)型,如NSArray的變量命名為xxxArray,其他的如xxxDictionary,xxxSize等。這樣就可以從名稱(chēng)上知道是什么類(lèi)型的變量。
③對(duì)于要和interface builder關(guān)聯(lián)的的輸出口變量,命名時(shí)要后綴以特定的控件名。
例如:IBOutlet UILabel *userNameLabel;
④盡量避免使用全局變量,使用全局變量時(shí),在變量前加一個(gè)下劃線(xiàn),如_dishesArray。
(4)方法:
①方法的名稱(chēng)使用有意義的單詞組成,且以小寫(xiě)字母開(kāi)頭,多單詞組合時(shí),后面的單詞首字母大寫(xiě)。
例如:-(void)getDishDetail
②設(shè)置類(lèi)變量的內(nèi)容的方法應(yīng)使用set作為前綴,讀取變量的內(nèi)容的方法應(yīng)使用get作為前綴。
例如:-(void)getDishes;
③方法中的參數(shù):第一個(gè)參數(shù)名稱(chēng)要從函數(shù)名稱(chēng)上攜帶出來(lái),第二個(gè)參數(shù)的首字母小寫(xiě),多個(gè)單詞組合時(shí),后面單詞首字母大寫(xiě)。參數(shù)有別名時(shí),參數(shù)別名與參數(shù)名一致,但參數(shù)名前綴以_。參數(shù)別名與前一參數(shù)保留1個(gè)空格。參數(shù)無(wú)別名時(shí),以有意義的字母命名。
例如:
-(void)getDishWithOffest:(NSString *)aOffest limit:(NSString *)aLimit;
(5)方法的定義:
①所有的私有方法和屬性全部定義在.m文件中。
②所有的共有方法和屬性全部定義在.h文件中。
③建立工具類(lèi)jxxmpp來(lái)完成所有xmpp相關(guān)的操作。
④使用委托和通知來(lái)完成消息的傳遞。
3.2 編碼思想
在編碼中主要采用的是面向?qū)ο蟮乃枷脒M(jìn)行源碼實(shí)現(xiàn)的[11]。面向?qū)ο蟮脑O(shè)計(jì)方法使得代碼結(jié)構(gòu)好且效率高,例如在解析服務(wù)器返回的json數(shù)據(jù)時(shí),將同屬于一個(gè)字典的屬性放到一個(gè)數(shù)據(jù)模型類(lèi)中,在這個(gè)數(shù)據(jù)模型類(lèi)中有若干屬性,用于保存該模型在數(shù)據(jù)庫(kù)中的各個(gè)字段。在該模型類(lèi)中實(shí)現(xiàn)數(shù)據(jù)的具體解析,在不同的地方使用的時(shí)候,只需要調(diào)用該模型類(lèi)的屬性即可。這樣,減少了重復(fù)代碼,也使得代碼的結(jié)構(gòu)更加清晰。
在面向?qū)ο笤O(shè)計(jì)中,編碼時(shí)我還注意使用了各種設(shè)計(jì)模式:MVC模式、工廠(chǎng)模式、觀察者模式、代理模式和單例模式。
MVC[12]全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫(xiě),一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯和數(shù)據(jù)顯式分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面,在界面和用戶(hù)圍繞數(shù)據(jù)的交互能被改進(jìn)和個(gè)性化定制的同時(shí)而不需要重新編寫(xiě)業(yè)務(wù)邏輯。MVC被獨(dú)特的發(fā)展起來(lái)用于映射傳統(tǒng)的輸入、處理和輸出功能在一個(gè)邏輯的圖形化用戶(hù)界面的結(jié)構(gòu)中。
MVC模式:即模型、視圖、控制器。模型主要負(fù)責(zé)數(shù)據(jù)的存儲(chǔ),視圖主要負(fù)責(zé)不同視圖效果的顯示,控制器主要負(fù)責(zé)不同視圖的承載和切換。這樣做的好處有:①降低代碼的耦合性,實(shí)現(xiàn)數(shù)據(jù)層、視圖層和業(yè)務(wù)層的分離。視圖層和業(yè)務(wù)層分離,就能允許更改視圖層代碼而不用重新編譯模型和控制器,同樣,一個(gè)應(yīng)用的業(yè)務(wù)流程或者業(yè)務(wù)規(guī)則的改變之需要改動(dòng)MVC的模型層即可。②高重用性和實(shí)用性,例如在工程中要實(shí)現(xiàn)用新浪微博、豆瓣、QQ3種方式登錄,根據(jù)用戶(hù)的選擇,改變不同的 WebView,使用同一個(gè)viewController,達(dá)到了重用的目的。③增加可維護(hù)性,由于不同的層各司其職,每一層的應(yīng)用具有某些不同的特征,有利于代碼的管理、維護(hù)。
觀察者模式:在此種模式中,一個(gè)目標(biāo)物件管理所有相依于它的觀察者物件,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽(tīng)某一主題對(duì)象,這個(gè)主題對(duì)象在狀態(tài)上發(fā)生變化時(shí)會(huì)通知所有的觀察者對(duì)象,使他們能夠自動(dòng)更新自己。例如在工程中,當(dāng)屏幕旋轉(zhuǎn)時(shí)發(fā)出通知,此時(shí),viewController就能夠接收到通知,在需要旋轉(zhuǎn)的viewController中寫(xiě)相應(yīng)的代碼就可以試想不同的視圖效果。
本項(xiàng)目通過(guò)使用結(jié)構(gòu)化分析方法進(jìn)行了需求分析、可行性分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì),用業(yè)務(wù)流程圖、數(shù)據(jù)流圖和功能結(jié)構(gòu)圖清晰地得到了軟件的模塊結(jié)構(gòu)。在設(shè)計(jì)過(guò)程中,從整個(gè)程序的結(jié)構(gòu)出發(fā),利用模塊結(jié)構(gòu)圖表述程序模塊之間的關(guān)系。
在功能的實(shí)現(xiàn)中,多采用 GCD[13]防止程序卡頓,大大提高了用戶(hù)體驗(yàn),使得整個(gè)軟件更加流暢和完美。
在編碼的過(guò)程中特別注意運(yùn)用面向?qū)ο蠓治龇椒?,使代碼結(jié)構(gòu)好且效率高,不僅減少了重復(fù)代碼,也使得代碼結(jié)構(gòu)清晰、降低耦合度。在編碼過(guò)程中,好的編碼習(xí)慣也是非常重要的,增加了代碼的可讀性和可維護(hù)性。除此之外,各種設(shè)計(jì)模式的使用也使得程序更加穩(wěn)定,代碼更加可行、高效。MVC模式減低了代碼的耦合度,實(shí)現(xiàn)了數(shù)據(jù)層、視圖層和業(yè)務(wù)層的分離;觀察者模式定義了一種一對(duì)多的依賴(lài)關(guān)系,在觀察者和被觀察者之間建立一個(gè)抽象的耦合;代理模式解決了某個(gè)類(lèi)不能靈活地完成具體操作的情況;單例模式實(shí)現(xiàn)了整個(gè)工程內(nèi)數(shù)據(jù)的唯一性,可以從內(nèi)存中直接讀取到需要的數(shù)據(jù),而避免了頻繁地讀寫(xiě)本地?cái)?shù)據(jù)庫(kù)或者本地 plist文件。在測(cè)試時(shí)特別注意了不同操作系統(tǒng)和不同分辨率的屏幕的適配的問(wèn)題。
[1] 劉志富基于xmpp的ios上的IM客戶(hù)端的研究與實(shí)現(xiàn)[D].華南理工大學(xué).2012:3-5.
[2] 詹雄濤.基于MVC模式的移動(dòng)業(yè)務(wù)支撐系統(tǒng)設(shè)計(jì)[J].福建電腦,2008,24(9):136-137.DOI:10.3969/j.issn.1673-2782.20 08.09.084.
[3] 林云.基于 iOS的房產(chǎn)信息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].北京交通大學(xué).2013.56-58.
[4] 趙曉燕.基于XMPP協(xié)議網(wǎng)站即時(shí)通訊系統(tǒng)的研究與實(shí)現(xiàn)[D].大連理工大學(xué).2012.23-78.
[5] 周文永.基于XMPP協(xié)議的企業(yè)級(jí)IM關(guān)鍵功能的研究及其在iOS端的實(shí)現(xiàn)[D].華南理工大學(xué),2013,12-28.
[6] 李國(guó)正.基于手機(jī)的移動(dòng)學(xué)習(xí)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[D].新疆師范大學(xué),2010.89-116.
[7] 張濤,黃強(qiáng),毛磊雅等.一個(gè)基于 JSON的對(duì)象序列化算法[J].計(jì)算機(jī)工程與應(yīng)用,2009,43(15):98-100,133.
[8] Liquan Shen,Zhi Liu,Tao Yan et al.Early SKIP mode decision for MVC using inter-view correlation[J].Signal Processing. Image Communication,2010,25(2):88-93.
[9] Mark Dalrymple,Scott Knaster.Objective-C基礎(chǔ)教程[M].北京:人民郵電出版社,2012:13-15.
[10] 陳雯菁.一種基于核心節(jié)點(diǎn)的信息安全設(shè)備聯(lián)動(dòng)協(xié)議模型[J].計(jì)算機(jī)與現(xiàn)代化.2012(12).89-119.
[11] 李小倩.基于 OS架構(gòu)的在線(xiàn)測(cè)試應(yīng)用軟件設(shè)計(jì)[D].吉林大學(xué).2012.45-89.
[12] 趙曉燕.基于XMPP協(xié)議網(wǎng)站即時(shí)通訊系統(tǒng)的研究與實(shí)現(xiàn)[D].大連理工大學(xué).2012.23-78.
[13] 賴(lài)云剛.方云龍.淺析計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境下單位網(wǎng)絡(luò)安全和技術(shù)[A].巨化集團(tuán)公司化工學(xué)會(huì)論文集(九)[C].2011.
TP393.1文獻(xiàn)標(biāo)志碼:A
2015.03.18)
1007-757X(2015)08-0022-04
河南省科技廳基礎(chǔ)與前沿研究課題(142300410296)
任靖娟(1969-)女,河南省濮陽(yáng)市人,漢族,碩士研究生,河南中醫(yī)學(xué)院,實(shí)驗(yàn)師,研究方向:現(xiàn)代教育技術(shù)與多媒體技術(shù),鄭州,450046