亚洲熟熟妇xxxx_亚洲欧美在线人成最新_久久久久国产一区二区_亚洲精品久久久久午夜福利_男女刺激床爽爽免费视频_99久久99久久精品免费观看_中文字幕欧洲有码无码_欧美熟妇丰满肥白大屁股免费视频_激情久久久久久久_亚洲高清www_老司机午夜免费福利视频_天天草综合网_欧美激情 亚洲_在线国产中文_亚洲日本视频在线观看_中文字幕一区二区三区乱码图片_曰韩精品无码一区二区三区视频_www.插插插.com_国产毛片毛片毛片毛片毛片毛片毛片_青娱乐国产精品

十年專注于品牌網(wǎng)站建設(shè) 十余年專注于網(wǎng)站建設(shè)_小程序開發(fā)_APP開發(fā),低調(diào)、敢創(chuàng)新、有情懷!
南昌百恒網(wǎng)絡(luò)微信公眾號 掃一掃關(guān)注
小程序
tel-icon全國服務(wù)熱線:400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號
掃一掃打開百恒網(wǎng)絡(luò)微信小程序

百恒網(wǎng)絡(luò)

南昌百恒網(wǎng)絡(luò)

如何進(jìn)行程序性能優(yōu)化(二)

百恒網(wǎng)絡(luò) 2017-05-19 6216

昨天我們講解了程序性能優(yōu)化中的內(nèi)存優(yōu)化,今天繼續(xù)跟隨南昌網(wǎng)絡(luò)公司小編學(xué)習(xí)如何優(yōu)化程序性能。重點分析程序性能優(yōu)化之優(yōu)化資源文件,延遲加載和數(shù)據(jù)持久優(yōu)化這三種方法,讓你的程序“飛”起來。

從狹義上講,資源文件是放置在應(yīng)用程序本地與應(yīng)用程序一起編譯、打包和發(fā)布的非程序代碼文件,如應(yīng)用中用到的聲音、視頻、圖片和文本文件等。從廣義上講,資源文件可以放置于任何地方,既可以放置于本地,也可以放在云服務(wù)器中。

在iOS中,本地資源文件編譯后,會放置于應(yīng)用程序包文件中(即<應(yīng)用名>.app文件)。如下代碼用于訪問如圖1所示team.plist本地資源文件:

資源文件

圖1 資源文件

圖1所示的“球隊圖片”組也放置了一些資源文件。添加資源文件的方法是通過右鍵添加文件到工程中。資源文件在使用的過程中需要優(yōu)化,包括文件格式、文件類型、文件大小和文件結(jié)構(gòu)等方面,使得它更適合某個應(yīng)用。“適合”這兩個字很重要。當(dāng)然,優(yōu)化方向有很多,下面我們從圖片文件優(yōu)化和音頻文件優(yōu)化這兩個方面介紹一下。

1.圖片文件優(yōu)化

圖片文件優(yōu)化包括文件格式和文件大小的優(yōu)化。在移動設(shè)備中,支持的圖片格式主要是PNG、GIF和JPEG格式,蘋果推薦使用PNG格式。在Xcode中,集成了第三方PNG優(yōu)化工具pngcrush①,它可以在編譯的時候?qū)NG格式文件進(jìn)行優(yōu)化和壓縮,而我們只需要設(shè)定如圖2所示的編譯參數(shù)Compress PNG Files為Yes就可以了。

設(shè)定編譯參數(shù)Compress PNG Files

圖2 設(shè)定編譯參數(shù)Compress PNG Files

打開“ ImageFile”工程中“測試圖片”目錄中background(未優(yōu)化).png文件,在Finder中查看該文件的屬性,它是一個320×480px、大小為317KB的PNG圖片,如圖3所示。

使用Xcode編譯工程,在編譯之后的目錄中找到ImageFile.app包文件。打開包文件,查看目錄中background(未優(yōu)化).png文件的屬性,可以發(fā)現(xiàn)該文件是205KB的PNG圖片了,如圖4所示。

未優(yōu)化的PNG文件屬性

圖3 未優(yōu)化的PNG文件屬性

優(yōu)化的PNG文件屬性

圖4 優(yōu)化的PNG文件屬性

Xcode工具可以在編譯時優(yōu)化PNG圖片,但是即便經(jīng)過優(yōu)化和壓縮的PNG圖片文件,也比JPEG圖片文件大得多。開“ImageFile”工程中“測試圖片”目錄中的background-8(優(yōu)化壓縮).png文件和background-h.jpg文件,比較可以發(fā)現(xiàn),前者是經(jīng)過優(yōu)化的質(zhì)量最低的PNG-8(8位PNG格式)文件,其大小是61KB;后者是經(jīng)過優(yōu)化的質(zhì)量最高的JPEG格式文件,其大小是22KB。在本例中,PNG比JPEG文件大3倍多。

如果是本地資源文件,這樣的差別不是很大,但如果是分布在網(wǎng)絡(luò)云服務(wù)器中的資源文件,應(yīng)用在加載這些圖片時,會從網(wǎng)絡(luò)上下載到本地,這時候JPEG就很有優(yōu)勢了。

綜上所述,如果在本地資源的情況下,我們應(yīng)該優(yōu)先使用PNG格式文件,如果資源來源于網(wǎng)絡(luò),最好采用JPEG格式文件。

另外,圖片是一種很特殊的資源文件。創(chuàng)建UIImage對象時,可以使用靜態(tài)工廠方法+imageNamed:和實例構(gòu)造器-initWithContentsOfFile:。+imageNamed:方法會在內(nèi)存中建立緩存,這些緩存直到應(yīng)用停止才清除。如果是貫穿整個應(yīng)用的圖片(如圖標(biāo)、logo等),推薦使用+imageNamed:創(chuàng)建。如果是僅使用一次的圖片,推薦使用實例構(gòu)造器-initWithContentsOfFile:創(chuàng)建。

2.音頻文件優(yōu)化

在討論音頻文件優(yōu)化之前,我們先討論一下音頻文件格式。在iOS平臺中,主要的音頻文件格式有以下4種。

WAV文件。WAV是一種由微軟和IBM聯(lián)合開發(fā)的用于音頻數(shù)字存儲的文件格式。WAV文件的格式靈活,

可以存儲多種類型的音頻數(shù)據(jù)。由于文件較大,不太適合于移動設(shè)備這些存儲容量小的設(shè)備。

MP3(MPEG Audio Layer 3)文件。MP3利用MPEG Audio Layer 3技術(shù),將數(shù)據(jù)以1∶10甚至1∶12的縮率壓縮成容量較小的文件。MP3是一種有損壓縮格式,它 盡可能地去掉人耳無法感覺的部分和不敏感的部分。這么高的壓縮比率非常適合于移動設(shè)備這些存儲容量小的設(shè)備,現(xiàn)在非常流行。

CAFF(Core Audio File Format)文件。CAFF是蘋果開發(fā)的專門用于Mac OS X和iOS系統(tǒng)的無壓縮音頻格式,它被設(shè)計用來替換老的WAV格式。

AIFF(Audio Interchange File Format)文件。AIFF是蘋果開發(fā)的專門用于Mac OS X系統(tǒng)的專業(yè)的音頻文件格式。AIFF的壓縮格式是AIFF-C(或AIFC),將數(shù)據(jù)以4∶1壓縮率進(jìn)行壓縮,應(yīng)用于Mac OS X和iOS系統(tǒng)。

音頻文件優(yōu)化包括了文件格式和文件大小的優(yōu)化,但也要考慮到文件使用場景、采用的技術(shù)(OpenAL、AVAudioPlayer)等因素。在iOS應(yīng)用中,使用本地音頻資源文件的主要應(yīng)用場景是背景音樂和音樂特效,下面我們從這兩個方面介紹相關(guān)的優(yōu)化技術(shù)。

(1)背景音樂優(yōu)化

背景音樂會在應(yīng)用中反復(fù)播放,它會一直駐留在內(nèi)存中并耗費CPU,所以更合適比較小的文件,而壓縮文件是不錯的選擇。壓縮文件主要有AIFC和MP3兩種格式,一般我們首選AIFC,因為這是蘋果推薦的格式。但是我們獲得的原始文件格式不一定是AIFC,這種情況下我們需要使用afconvert工具將其轉(zhuǎn)換為AIFC格式。在終端中執(zhí)行如下命令:

$ afconvert -f AIFC -d ima4 Fx08822_cast.wav

其中-f AIFC參數(shù)用于轉(zhuǎn)換為AIFC格式,-d ima4參數(shù)指定解碼方式,F(xiàn)x08822_cast.wav是要轉(zhuǎn)換的源文件。轉(zhuǎn)換成功后,會在相同目錄下生成Fx08822_cast.aifc文件。本例中的源文件Fx08822_cast.wav的大小是295KB,轉(zhuǎn)換之后的Fx08822_cast.aifc文件的大小是82KB。當(dāng)然,afconvert工具也可以轉(zhuǎn)換MP3等其他壓縮格式文件。如果我們同時有WAV文件,就應(yīng)該優(yōu)先采用WAV文件。MP3本身是有損壓縮,如果再經(jīng)過afconvert轉(zhuǎn)換,音頻的質(zhì)量會受到影響。

(2)音樂特效優(yōu)化

音樂特效用于很多游戲中,如發(fā)射子彈、敵人被打死或按鈕點擊等發(fā)出的聲音,這些聲音都是比較短的。如果追求震撼的3D效果,可以采用蘋果專用的無壓縮CAFF格式文件,其他格式的文件盡量不要考慮。一般不要使用壓縮音頻文件,這主要是因為音樂特效通常采用OpenAL技術(shù),它只接受無壓縮的音頻文件。另外,壓縮音頻文件都會造成音質(zhì)的丟失。如果我們沒有CAFF格式的文件,也可以使用afconvert工具將其轉(zhuǎn)換為CAFF格式。在終端中執(zhí)行如下命令:

$ afconvert -f caff -d LEI16 Fx08822_cast.wav

其中-f caff參數(shù)用于轉(zhuǎn)換為CAFF格式,-d LEI16參數(shù)指定解碼方式,F(xiàn)x08822_cast.wav是要轉(zhuǎn)換的源文件。默認(rèn)音頻的采樣頻率為22050Hz,如果想提高音頻采樣頻率,可以通過如下命令:

$ afconvert -f caff -d LEI16@44100 Fx08822_cast.wav

其中-d LEI16@44100參數(shù)中的44100表示音頻采用頻率44100Hz。

如果我們采用的資源文件不在本地,而是在分布在網(wǎng)絡(luò)云服務(wù)器中,那么情況就另當(dāng)別論了。應(yīng)用在加載這些音頻文件時,帶寬往往是要考慮的問題,減小文件大小勝過對音質(zhì)的要求,這種情況下MP3格式是非常適合的。

綜上所述,音頻文件在使用本地資源的情況下,應(yīng)用于背景音樂時AIFC格式是首選,應(yīng)用于音樂特效時CAFF格式是首選。如果是資源來源于網(wǎng)絡(luò),最好采用MP3格式文件。

3.延遲加載

延遲加載(lazy load)指一些對象不是在應(yīng)用和視圖等初始化時創(chuàng)建,而是在用到它的時候創(chuàng)建。當(dāng)應(yīng)用中有一些對象并不經(jīng)常使用時,延遲加載可以提高程序性能。

3.1 資源文件的延遲加載

首先,我們要考慮的就是對資源文件的延遲加載。由于資源文件的訪問涉及IO操作,這本身就會耗費一定的CPU時間,如果文件比較大而且加載時機又不合適,就會造成內(nèi)存浪費。前面我們了解到資源文件包括圖片、音頻和文本文件等,無論是什么類型的文件,有些情況下采用延遲加載是很有必要的。例如,我們有如圖5所示的需求,可以使用分屏件(UIPageControl)左右滑動屏幕來瀏覽這3張圖片。

圖片延遲加載實例

5 圖片延遲加載實例

PageControlNavigation實例是沒有采用延遲加載的實現(xiàn)代碼,其中的ViewController代碼如下:

ViewController代碼一

ViewController代碼二

我們是在viewDidLoad方法中一次加載全部3張圖片,但是有的時候用戶不一定會瀏覽后面的圖片,他可能只看到第一張或第二張,后面的第三張沒有去看,此時后面的兩張圖片仍然加載內(nèi)存的話,會造成內(nèi)存浪費。采用延遲加載實現(xiàn)時(見實例LazyLoadPageControlNavigation),ViewController的代碼如下:

ViewController的代碼一

ViewController的代碼二

ViewController的代碼三

我們重新修改了這個實例,在viewDidLoad方法中只加載第一張圖片,見第①行代碼。如果用戶滑動屏幕或點擊分屏控件進(jìn)入第二個屏幕,則調(diào)用loadImage:方法加載第二張圖片,類似地,如果要進(jìn)入第三個屏幕,則調(diào)用loadImage:方法加載第三張圖片。

在這兩種實現(xiàn)方式中,LazyLoadPageControlNavigation實現(xiàn)了延遲加載。很顯然,LazyLoadPageControlNavigation的延遲加載友好很多。那么,兩者究竟有多大的差別,這是可以量化的。通過Instruments工具的Allocations模板,可以分析ViewController視圖控制器加載時內(nèi)存占用方面的差別。圖6是無延遲加載實現(xiàn)案例的Allocations模板跟蹤,圖7是采用延遲加載實現(xiàn)案例的Allocations模板跟蹤。

如圖6所示,界面啟動用時,內(nèi)存占用馬上達(dá)到8.12MB。如圖7所示,界面啟動用時,內(nèi)存占用3.08MB,當(dāng)我們滑動到第二和第三屏幕時,內(nèi)存占用達(dá)到8.06MB,內(nèi)存變化會有明顯的兩個階梯。

無延遲加載實現(xiàn)案例的Allocations模板跟蹤

圖6 無延遲加載實現(xiàn)案例的Allocations模板跟蹤

使用延遲加載實現(xiàn)案例的Allocations模板跟蹤

圖7 使用延遲加載實現(xiàn)案例的Allocations模板跟蹤

在上面的案例中可以發(fā)現(xiàn),延遲加載的優(yōu)勢很明顯。如果一定會訪問到資源文件,則延遲加載這些資源文件時,內(nèi)存占用方面就沒有優(yōu)勢了,但是在界面加載速度方面還是有優(yōu)勢的。

3.2 故事板文件的延遲加載

xib和故事板也都屬于資源文件,它是非常特殊的資源文件,應(yīng)用不僅需要讀取它,而且要根據(jù)里面描述的信息創(chuàng)建視圖和子視圖,以及它們的視圖控制器等對象。創(chuàng)建這么多對象會耗費很多時間,占用很多內(nèi)存,因此,它們的延遲加載問題非常重要。

默認(rèn)情況下,創(chuàng)建基于故事板的應(yīng)用時,只有一個故事板文件。這種情況下,故事板內(nèi)部的視圖控制器的創(chuàng)建和加載都是由Segue來控制的,Segue會幫助我們管理好這些控制器,包括延遲加載等問題。

我們創(chuàng)建一個實用型應(yīng)用程序①,研究故事板的延遲加載機理。實用型應(yīng)用一般會有兩個視圖:主視圖,它顯示應(yīng)用的主要功能;子視圖,它用來對應(yīng)用進(jìn)行一些設(shè)置。我們自己創(chuàng)建一個實用型應(yīng)用,如圖8所示。

實用型應(yīng)用

圖8 實用型應(yīng)用

在Xcode 5之前可以使用Utility Application模板創(chuàng)建,Xcode 6之后就沒有這個模板了,我們可以通過SingleView Application模板創(chuàng)建StoryboardLazyLoadDemo工程。

在主視圖中點擊 按鈕,MainViewController會延遲加載FlipsideViewController,然后彈出模態(tài)模式。使用模態(tài)Segue連接MainViewController和FlipsideViewController,如圖9所示,我們基本上不需要編寫什么代碼。

模態(tài)視圖的Segue

圖9 模態(tài)視圖的Segue

Segue定義了兩個視圖控制器的導(dǎo)航關(guān)系,也用來維護和管理下一個視圖控制器的延遲加載時機,這種情況下我們無法“插手”視圖控制器的延遲加載。但是一種情況除外,那就是使用了故事板,而控制器之間沒有定義導(dǎo)航關(guān)系,沒有定義Segue,如圖10所示。

沒有定義Segue的故事板

圖10 沒有定義Segue的故事板

這種情況下,添加showInfo:方法響應(yīng)主視圖的 按鈕點擊事件,具體可參考StoryboardLazyLoadNoSegueDemo工程的MainViewController,相關(guān)代碼如下:

StoryboardLazyLoadNoSegueDemo工程的MainViewController

在單一故事板文件中,第①行代碼可以獲得當(dāng)前的故事板對象。如果想在多故事板的情況下獲得非當(dāng)前故事板對象,可以通過第②行代碼的UIStoryboard構(gòu)造器創(chuàng)建。本例中不用使用該語句,使用它會多創(chuàng)建一個故事板對象,就會占用更多的內(nèi)存。

3.3 xib 文件的延遲加載

相對于故事板而言,xib要靈活很多。xib文件有兩種:一種是描述視圖控制器的,另一種是描述視圖的,它們的加載方式有所區(qū)別。無論是哪一種,分散管理的xib文件使我們通過編程方式訪問它更加方便。

Xcode 6不能創(chuàng)建基于xib文件的工程了,我們通過Single View Application模板創(chuàng)建NibLazyLoadDemo工程,然后刪除主故事板文件。接著我們創(chuàng)建視圖控制器,如圖11所示,一定要選擇Also create XIB file復(fù)選框,這會幫助我們創(chuàng)建與視圖控制器對應(yīng)的xib文件。

創(chuàng)建視圖控制器

圖11 創(chuàng)建視圖控制器

創(chuàng)建好視圖控制器后,我們需要修改AppDelegate使應(yīng)用啟動時能夠加載MainViewController。AppDelegate的主要代碼如下:

AppDelegate的主要代碼

上述代碼中,第①~③行是我們添加的代碼,第①行代碼用于創(chuàng)建Window對象,在xib構(gòu)建的視圖中必須放到一個Window中,第②行代碼通過xib文件創(chuàng)建視圖控制器對象,然后再把視圖控制器添加到Window對象中。主視圖控制器MainViewController中showInfo:方法的代碼如下:

主視圖控制器MainViewController中showInfo:方法的代碼一

主視圖控制器MainViewController中showInfo:方法的代碼二

本例中的xib文件是視圖控制器xib文件,我們可以使用視圖控制器的initWithNibName:bundle:構(gòu)造器從xib文件中創(chuàng)建視圖控制器對象。

有些情況下,故事板和xib會混合使用。在有故事板的工程中,有時候需要使用別人已經(jīng)編寫好的xib文件和對應(yīng)類(視圖或視圖控制器)。當(dāng)然,通過上面的兩種方式也是可以的。

4.數(shù)據(jù)持久化的優(yōu)化

在iOS中,數(shù)據(jù)持久化的載體主要有文件、SQLite數(shù)據(jù)庫和Core Data。本節(jié)中,我們就從這幾個方面入手討論數(shù)據(jù)持久化的優(yōu)化問題。

4.1 使用文件

文件是數(shù)據(jù)持久化的重要載體。文件優(yōu)化可以包括很多方面,下面我們從文件訪問、文件結(jié)構(gòu)和文件大小這3個方面來介紹。

(1)文件訪問優(yōu)化

避免多次寫入很少的數(shù)據(jù),最好是當(dāng)數(shù)據(jù)積攢到一定數(shù)量時一次寫入。因為文件訪問涉及IO操作,我們知道頻繁的IO操作會影響性能,所以最好將文件讀寫訪問從主線程中剝離出來,由一個子線程負(fù)責(zé)。另外,過于頻繁地寫入數(shù)據(jù)會影響設(shè)備中閃存的壽命。

文件的寫入應(yīng)該采用增量方式,每次只寫入變化的部分,不要為改變幾個字節(jié)寫入整個文件。這樣就要求不能采用簡單的屬性列表對象寫入方式。這是一個很復(fù)雜的問題,文件內(nèi)容的變化可以是追加、刪除和修改。文件追加很容易實現(xiàn),刪除就比較麻煩了,需要找到要刪除的數(shù)據(jù),這樣訪問文件就采用隨機訪問方式了。修改與刪除的問題是一樣的。與其這么麻煩,不如采用別的持久化技術(shù)了。

(2)文件結(jié)構(gòu)優(yōu)化

文件要保存數(shù)據(jù),它就應(yīng)該是結(jié)構(gòu)化的。蘋果中的.plist文件就是很好的結(jié)構(gòu)化文件,其結(jié)構(gòu)是層次模型的樹形結(jié)構(gòu),層次的深淺會影響讀取/寫入的速度。在能夠滿足用戶需求的情況下,要減少層次深度。下面是一個世界杯足球賽部分小組信息的屬性列表文件team(5層次).plist:

世界杯足球賽部分小組信息的屬性列表文件team(5層次).plist

世界杯足球賽部分小組信息的屬性列表文件team(5層次).plist

該文件有5個層次,具體如圖12所示,其中第一層是數(shù)組類型集合;第二層是字典集合,其中描述了小組名和小組中的球隊列表;第三層是數(shù)組類型集合,描述了小組中的球隊列表;第四層是字典集合;第五層是字符串,描述了球隊名和球隊圖標(biāo)信息。

5個層次的team.plist文件

圖12 5個層次的team.plist文件

這個文件訪問起來很不方便,遍歷起來也很不方便,也很影響性能。我們重新設(shè)計了這個屬性列表文件,其內(nèi)容如下:

屬性列表文件一

屬性列表文件二

此時這個文件有3個層次,其中第一層是數(shù)組類型集合,第二層是字典集合,第三層是字符串,描述了球隊名和球隊圖標(biāo)信息,如圖13所示。

3層次的team.plist文件

圖13 3層次的team.plist文件

與上面的5層次文件相比,3層次訪問起來比較方便,性能會比較好。此外,在文件大小方面,3層次文件是647KB,5層次文件是893KB。

(3)文件大小優(yōu)化

文件大小也是優(yōu)化的一個重要指標(biāo)。從上面的比較可以看到,調(diào)整文件結(jié)構(gòu)可以減少文件大小。此外,我們也可以通過序列化.plist文件減少文件大小。 Foundation框架提供了NSPropertyListSerialization類,它就是為此而設(shè)計的。NSPropertyListSerialization類中有2個常用方法,具體如下所示。

+ dataWithPropertyList:format:options:error:。按照指定的格式和操作參數(shù),序列化屬性列表對象到NSData對象。

+ propertyListWithData:options:format:error:。按照指定的格式和操作參數(shù),從NSData對象反序列化到屬性列表對象中。

為了介紹NSPropertyListSerialization類,現(xiàn)在我們換成序列化二進(jìn)制文件NotesList.binary。下面我們修改數(shù)據(jù)持久層工程PersistenceLayer中的NoteDAO類,首先,添加如下兩個方法:

數(shù)據(jù)持久層工程PersistenceLayer中的NoteDAO類

在上述代碼中,readFromArray:方法從文件中讀取數(shù)據(jù)到NSMutableArray,其流程是讀取文件到NSMutableData對象,然后再從NSMutableData對象中反序列化處理屬性列表對象。本例中的屬性列表對象是NSMutableArray類型,其中第①行代碼用于處理這一過程。propertyListWithData后面的參數(shù)是反序列化的數(shù)據(jù)來源,它是NSData類型。options后面的參數(shù)是NSPropertyListReadOptions。在Swift版本中,使用表達(dá)式NSPropertyListReadOptions-(NSPropertyListMutabilityOptions.MutableContainers.rawValue),Objective-C版本是NSPropertyListMutableContainersAndLeaves。NSPropertyListMutabilityOptions是枚舉類型,其成員值如下。

Immutable。屬性列表包含不可變對象。Objective-C版本為NSPropertyListImmutable。

MutableContainers。屬性列表父節(jié)點是可變類型,子節(jié)點是不可變類型。Objective-C版本為NSPropertyListMutableContainers。

MutableContainersAndLeaves。屬性列表父節(jié)點和子節(jié)點都是可變類型。Objective-C版本為NSPropertyListMutableContainersAndLeaves。

另外,在第①行代碼中,format參數(shù)為nil(或NULL),說明格式是自動識別的。

南昌網(wǎng)絡(luò)公司小編提示:屬性列表對象是與屬性列表文件結(jié)構(gòu)對應(yīng)的,它可以是NSData、NSString、NSArray和NSDictionary類型以及它們的可變類型。此外,還可以是NSDate和NSNumber類型。

write:toFilePath:方法把NSMutableArray數(shù)據(jù)序列化后寫入到文件中,流程是先序列化NSMutableArray數(shù)據(jù)到 NSData 對象中,然后在把 NSData 對象寫入到文件中。第②行代碼就是完成序列化處理的,+dataWithPropertyList:format:options:error:方法中array參數(shù)是要序列化的屬性列表對象,format參數(shù)是NSPropertyListFormat枚舉類型。NSPropertyListFormat枚舉類型包含的常量有如下幾個。

XMLFormat_v1_0。指定屬性列表文件格式是XML格式,仍然是純文本類型,不會壓縮文件。Objective-C版本為NSPropertyListXMLFormat_v1_0。

BinaryFormat_v1_0。指定屬性列表文件格式為二進(jìn)制格式,文件是二進(jìn)制類型,會壓縮文件。Objective-C版本為NSPropertyListBinaryFormat_v1_0。

OpenStepFormat。指定屬性列表文件格式為ASCII碼格式,對于舊格式的屬性列表文件,不支持寫入操作。

Objective-C版本為NSPropertyListOpenStepFormat。

本例中,我們設(shè)置的是BinaryFormat_v1_0,大小減少了,加載速度提高了,這樣就達(dá)到了優(yōu)化的效果。

4.2 使用 SQLite 數(shù)據(jù)庫

當(dāng)需要處理較大的數(shù)據(jù)集合時,就不能采用文件了。因為文件不支持事務(wù)處理,這時候我們可以選擇SQLite數(shù)據(jù)庫或Core Data。本節(jié)中,我們先從表結(jié)構(gòu)、查詢和插入(或刪除)這幾個方面介紹一下SQLite數(shù)據(jù)庫方面的優(yōu)化。

(1)表結(jié)構(gòu)優(yōu)化

SQLite是嵌入式關(guān)系型數(shù)據(jù),它可以建立多表之間復(fù)雜的關(guān)系,但是如果放在iOS、Android等這些移動設(shè)備上時,我們需要考慮設(shè)備上本地表能建多少,表中字段有多少,表之間關(guān)系的復(fù)雜程度等問題。

在CPU處理能力低、內(nèi)存少、存儲空間少的情況下,我們不能在本地建立復(fù)雜表關(guān)系,表的個數(shù)不要超過5個,表中的字段數(shù)也不宜太多。移動設(shè)備中的數(shù)據(jù)不可能是企業(yè)級系統(tǒng)數(shù)據(jù)的全部,它只是企業(yè)級系統(tǒng)的補充和擴展。例如,在你的iPhone手機中,不可能有全部的新浪微博用戶信息,一方面是不安全,另一方面是數(shù)據(jù)量很大,最高配置的iPhone也不可能存放下這么多數(shù)據(jù)。這是我們在開發(fā)移動應(yīng)用時始終要牢記的:移動設(shè)備在整個應(yīng)用系統(tǒng)中的角色是什么?

(2)查詢優(yōu)化

查詢是衡量數(shù)據(jù)庫性能的重要指標(biāo)之一。在查詢方面可優(yōu)化的有很多,例如建立索引、限制返回記錄數(shù)和where條件子句等。

使用索引,能夠提高查詢的性能。具體哪些字段需要創(chuàng)建索引,這很關(guān)鍵。只有在表連接或where條件子句中使用字段時,才能提高查詢性能。在INTEGER PRIMARY KEY字段上,一般不用建索引。如果表中的數(shù)據(jù)很少,則建索引的效果不大。

由于移動設(shè)備屏幕相對來說比較小,屏幕上能顯示的數(shù)據(jù)不多,如果一次查詢出的記錄數(shù)超過屏幕能顯示的行數(shù),這就沒有必要了,因為這樣反而會占用更多的內(nèi)存,耗費寶貴的CPU時間。因此,我們需要為查詢添加返回記錄數(shù)的限制。下面的語句是SQLite支持的寫法:

SELECT * FROM Note Limit 10 Offset 5;

以上語句表示從Note表查詢數(shù)據(jù)出來,其中10表示查詢的最大記錄數(shù)不超過10個,5表示偏移量,即跳過5行取10個。

在where條件子句的優(yōu)化方面,就有更多優(yōu)化方式了。比如,盡量不要使用LIKE模糊匹配查詢,如果可能,則使用=查詢;盡量不要使用IN語句,可以使用=和or替代。此外,在多個條件中,要把非文本的條件放在前面,文本條件放在后面,示例代碼如下:

(salary > 5000000) AND (lastName LIKE 'Guan') 優(yōu)于 (lastName LIKE 'Guan') AND (salary > 5000000)

這是因為非文本的條件判斷比較快,如果不滿足,就不用再計算后面的條件表達(dá)式了。

(3)插入(或刪除)優(yōu)化

索引可以提供查詢性能,但是對于插入和刪除是有負(fù)面影響的。索引就像是書中的目錄,插入和刪除數(shù)據(jù)必然造成索引重排,所以創(chuàng)建索引要慎重。

在SQLite中,有一些PRAGMA指令可以改變數(shù)據(jù)庫的行為。PRAGMA synchronous指令用于設(shè)置數(shù)據(jù)同步操作。同步是指在插入數(shù)據(jù)時,將數(shù)據(jù)同時保存到存儲介質(zhì)中。如果PRAGMA synchronous = OFF,則表示關(guān)閉了數(shù)據(jù)同步,不等待數(shù)據(jù)保存到存儲介質(zhì)就可繼續(xù)執(zhí)行插入操作,這在大量數(shù)據(jù)插入時可以大大提高速度。在Objective-C中,可以調(diào)用sqlite3_exec函數(shù)設(shè)置數(shù)據(jù)是否同步,相關(guān)語句如下:

sqlite3_open(DATABASE, &db)

sqlite3_exec(db, "PRAGMA synchronous = OFF", nil, nil, nil)

插入完成后,也可以重新設(shè)置PRAGMA synchronous = NORMAL或PRAGMA synchronous = FULL。

4.3 使用 Core Data

Core Data是面向?qū)ο蟮腛RM技術(shù),蘋果公司推薦使用。它提供了緩沖、延遲加載等技術(shù),其性能比較好,但有時候我們會發(fā)現(xiàn)它的性能要比SQLite差,這主要與存儲類型的設(shè)置有關(guān)。Core Data的存儲類型有NSSQLiteStoreType、NSBinaryStoreType和NSInMemoryStoreType,我們主要采用NSSQLiteStoreType類型,這樣底層存儲就采用了SQLite數(shù)據(jù)庫,SQLite數(shù)據(jù)庫的優(yōu)點也能發(fā)揮出來。

使用Core Data時,還要考慮查詢優(yōu)化問題。它的查詢是通過NSFetchRequest執(zhí)行Predicate定義的邏輯查詢條件實現(xiàn)的,在優(yōu)化規(guī)則上與SQLite的where條件子句是一樣的。此外,如果要查詢返回記錄數(shù)的限制,可以使用如下語句:

Core Data

這兩條語句相當(dāng)于SELECT * FROM Note Limit 10 Offset 5;。

此外,還可以設(shè)置pragma指令,相關(guān)語句如下:

設(shè)置pragma指令

在上述代碼中,我們首先把這些pragma指令放置于NSMutableDictionary可變字典中,然后以NSSQLitePragmasOption為鍵再把指令設(shè)置到可變字典中。NSPersistentStore對象的addPersistentStoreWithType:configuration:URL:

options:error:方法的options參數(shù)用于接收設(shè)置的NSDictionary對象。

為了方便分析Core Data的執(zhí)行情況,我們可以使用Instruments工具中的Core Data跟蹤模板,如圖14所示。

選擇Core Data跟蹤模板

圖14 選擇Core Data跟蹤模板

進(jìn)入Core Data跟蹤模板后,如圖15所示,可以看到其內(nèi)部有3個跟蹤項目:Core Data Fetches、Core DataCache和Core Data Saves。

Core Data跟蹤模板

圖15 Core Data跟蹤模板

當(dāng)我們執(zhí)行查詢、插入和刪除操作時,在Core Data Fetches和Core Data Saves的跟蹤項目右邊會產(chǎn)生很多線。

其中,①部分的線段為Fetch count(查詢的記錄數(shù)據(jù));②部分的線段為Fetch duration(執(zhí)行查詢的持續(xù)時間),將虛線拉到上面可以看到這些內(nèi)容的具體數(shù)值;如果有數(shù)據(jù)要保存,③部分產(chǎn)生的線段為Save duration(保存所持續(xù)的時間);④部分是更具體的信息,F(xiàn)etch entity列是查詢的實體類(Note),F(xiàn)etch count列是查詢的記錄數(shù),F(xiàn)etch duration列是查詢的執(zhí)行時間。

了解更多相關(guān)資訊,關(guān)注南昌網(wǎng)絡(luò)公司--百恒網(wǎng)絡(luò)官方網(wǎng)站。百恒網(wǎng)絡(luò)是一家專業(yè)從事南昌網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、網(wǎng)絡(luò)營銷等服務(wù)的南昌網(wǎng)絡(luò)公司,技術(shù)過硬,經(jīng)驗豐富。如有任何網(wǎng)站方面的問題,百恒網(wǎng)絡(luò)隨時歡迎大家來電咨詢,我們專業(yè)為您解答!

400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號
掃一掃打開百恒網(wǎng)絡(luò)小程序

歡迎您的光顧,我們將竭誠為您服務(wù)×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務(wù) 售后服務(wù)
 
售后服務(wù) 售后服務(wù)
 
備案專線 備案專線
 
×
主站蜘蛛池模板: 0516 有限公司| 深圳市环球数码有限公司| 永勤玩具实业有限公司| 天津二通阀门有限公司| 深圳市日升电子有限公司| 利纳马无锡有限公司| 深圳华裕电子有限公司| 伟思富奇太仓有限公司| 美华包装材料有限公司| 林州顺丰电动车业有限公司 | 诺比克电梯有限公司| 深圳富晶隆电子有限公司| 深圳市鑫宝电子有限公司| 河北新河 有限公司| 广州巧巧贸易有限公司| 三源环保工程有限公司| 圳兴利家具有限公司| 浙江新东方紧固件有限公司| 深圳勘察测绘有限公司| 佳盟子机床有限公司| 深圳宏发电子有限公司| 天津三星光电有限公司| 深圳爱索佳实业有限公司| 苏州有色金属材料有限公司| 科利华电器有限公司| 工程监理有限公司 资质| 西安中软国际有限公司| 华菱汽车有限公司招聘| 邢台儿童玩具有限公司| 金丰易居置业有限公司| 深圳市瑞达光电有限公司| 陕西特种车有限公司| 天津诺尔电气有限公司| 申能环保再生有限公司| 德纳(南京)化工有限公司| 扬子医疗器械有限公司| 广东纸品有限公司招聘| 华亚塑胶(芜湖)有限公司| 阿李自动化有限公司| 博业激光设备有限公司| 东盛金属材料有限公司| 维仕小额贷款有限公司| 兴达电路板有限公司| 奥力来康体设备有限公司| 深圳市车视电子有限公司| 威海混凝土有限公司| 明达玻璃 武汉 有限公司| 广州金霸建材有限公司| 青岛大统纺织有限公司| 河南贝利石化有限公司| 北京奇虎360有限公司| 湖南融资租赁有限公司| 南京艺术培训有限公司| 妙字号食品有限公司| 中兴通讯技术有限公司| 襄阳市金属有限公司| 厦门 母婴用品有限公司| 郑州船王焊材有限公司| 华龙包装材料有限公司| 上海亚德林有限公司| 东莞穗丰食品有限公司| 北恒机械有限公司招聘| 上海凡就工贸有限公司| 深圳尼康电子有限公司| 深圳崇德物业有限公司| 广东南车轨道交通车辆有限公司 | 中鼎精工技术有限公司| 浙江西谷数字技术有限公司| 泰州三福船舶工程有限公司| 大湖新鲜食品果汁有限公司| 广西润发通信有限公司| 新协力包装制品有限公司| 微山湖食品有限公司| 张家港酒店有限公司| 深圳比苛电池有限公司| 北方石油化工有限公司| 扬州光电仪器有限公司| 青岛盛德食品有限公司| 常熟模具制造有限公司| 汕头华润医药有限公司| 南方网通信息技术有限公司| 安阳市健丰食品有限公司| 宏桂绿色食品有限公司| 史密斯医疗器械有限公司| 格鲁博机械有限公司| 江苏昌瑞机械有限公司| 珠海嘉兆电子有限公司| 合肥 定 有限公司| 浙江省保健品有限公司| 中鼎精工技术有限公司| 北京京航安装有限公司| 合肥市消防有限公司| 成都明瑞电子有限公司| 泰密克电子有限公司| 联振电子 深圳 有限公司| 京特(深圳)有限公司| 威卡自动化仪表苏州有限公司| 书画艺术品有限公司| 李尔汽车系统扬州有限公司| 上海餐饮有限公司简介| 河南麦草动漫有限公司| 上海伊顿流体动力有限公司| 美亚金属制品有限公司| 江苏 石油 设备有限公司| 爱居装饰工程有限公司| 上海梵颂建材有限公司| 明治雪糕(广州)有限公司| 三鼎光电仪器有限公司| 环宇环保设备有限公司| 苏州佳彩精密有限公司| 沈阳茵特机电设备有限公司| 建工三建设有限公司| 深圳市恒通达有限公司| 陕西石化设备有限公司| 江苏中东化肥有限公司| 雅图数字视频技术有限公司| 科耐欧贸易上海有限公司| 广州公路工程有限公司| 兖州 车 有限公司| 汇文有限公司怎么样| 虎巴国际贸易有限公司| 扬州光电仪器有限公司| 六 九电缆有限公司| 中交港航工程有限公司| 华信能源北京有限公司| 亚新科天津汽车零部件有限公司| 百度云计算有限公司| 华润置地(厦门)有限公司| 湖南中创教育有限公司| 木林森照明有限公司| 吴江市昌纺织有限公司| 上海都纳信息有限公司| 广州礼德财富信息技术有限公司| 奥丰汽车配件有限公司| 舍弗勒 南京 有限公司| 伟业安防工程有限公司| 巨航机械制造有限公司| 胜品(北京)食品有限公司| 北京中科建材有限公司| 荆州三金电器有限公司| 山东 互联网有限公司| 灵宝金源矿业有限公司| 金马国际旅行社有限公司| 浙江力夫机电制造有限公司| 中腾信 上海有限公司| 三菱电机汽车部件有限公司| 台州厨房设备有限公司| 春金油脂工业有限公司| 主力实业深圳有限公司| 北京捷众汽车有限公司| 邦基(南京)农牧有限公司| 润扬进出口有限公司| 世纪天源环保技术有限公司| 山东净水材料有限公司| 日铁金属制品有限公司| 辽宁堂医药有限公司| 鑫三合苏州有限公司| 陕西福友电器有限公司| 中美家具(深圳)有限公司| 力马化工机械有限公司| 金牌厨柜厦门有限公司| 昌源建筑工程有限公司| 中知知识产权有限公司| 温州箱包配件有限公司| 海球(广州)商业有限公司| 赣州大华地产有限公司| 日东电子发展深圳有限公司| 恒祥建设工程有限公司| 义乌市打火机有限公司| 弓箭玻璃器皿有限公司| 深圳三和隆有限公司| 佳创(北京)贸易有限公司| 华博罗工业有限公司| 深圳水务工程有限公司| 浙江咸亨国际通用设备有限公司| 贵州茅乡酒业有限公司| 东莞美信电子有限公司| 天津隆顺榕制药有限公司| 蓝骑士电子有限公司| 奥丰汽车配件有限公司| 秦皇岛索坤玻璃有限公司| 玛连尼法亚机械有限公司| 奥美工业深圳有限公司| 闽太消防水暖有限公司| 中移工程有限公司招聘| 成都嘴嘴香食品有限公司| 淄博齐翔化工有限公司| 雾博信息技术有限公司| 南通东辰塑胶有限公司| 物联网工程与技术有限公司| 武钢新日铁有限公司| 东岳有机硅材料有限公司| 深圳富迪电子有限公司| 山西液压设备有限公司| 佐敦涂料张家港有限公司| 聚春园食品有限公司| 兰吉尔仪表有限公司| 华瑞生物工程有限公司| 东润机械制造有限公司| 浙江医用工程有限公司| 四川城市监理有限公司| 天津鹏丰机械设备有限公司| 郑州恒重工机械有限公司| 上海明治巧克力有限公司| 淄博鲁华化工有限公司| 辉宏建筑工程有限公司| 中誉电子上海有限公司| 雄峰特殊钢有限公司| 四川旭康医疗电器有限公司| 台州工程建设有限公司| 翱泰温控器深圳有限公司| 积水置业沈阳有限公司| 消防通风设备有限公司| 慈溪宁波电器有限公司| 东莞塑胶工业有限公司| 众旭机械制造有限公司| 艺利磁铁 天津 有限公司| 宏富国际货运有限公司| 青岛太平洋食品有限公司| 宏兴隆湘莲食品有限公司| 中宏建建设有限公司| 四川润川酒业有限公司| 江苏井神盐化有限公司| 林州市建设工程有限公司| 中建一局装饰工程有限公司| 迈思特轴承有限公司| 三元乳业上海有限公司| 宁波福科电子有限公司| 苏州恒富威有限公司| 一汽四川专用汽车有限公司| 杭州食品原料有限公司| 山东金展置业有限公司| 东芝泰格信息系统有限公司| 深圳远望电子有限公司| 品谱 厦门 工业有限公司| 五洲机械制造有限公司| 精密花岗石有限公司| 浙江环保设备工程有限公司| 唯科生物制药有限公司| 冀东海德堡水泥有限公司| 雅昌艺术印刷有限公司| 四川成都建材有限公司| 聚赛龙工程塑料有限公司| 济丰包装(上海)有限公司| 贵阳汽车贸易有限公司| 银圣王洁具有限公司| 湖南长沙建材有限公司| 成都仁孚汽车有限公司| 郑州陆港国际有限公司| 苏州金品金属制品有限公司| 山东电气成套设备有限公司| 浙江惠多利农资有限公司| 深圳创力有限公司招聘| 南宁品匠装饰工程有限公司| 沈阳发电设备有限公司| 万香园食品有限公司| 四川 阀业有限公司| 深圳市瑞丰光电子有限公司| 号令天下通讯有限公司| 深圳 聚力电子有限公司| 新一代食品有限公司| 浙江高压电器有限公司| 深圳百维技术有限公司| 杭州元通汽车有限公司| 上海顺发实业有限公司| 诚志生物工程有限公司| 建工三建设有限公司| 南通精密铸造有限公司| 昆山丰岛电子有限公司| 深圳展华电子有限公司| 祥恒莆田包装有限公司| 新雪域农产品有限公司| 常熟华润电力有限公司| itt南京有限公司| 申欣环保实业有限公司| 上海康麦斯有限公司| 坚田电机(昆山)有限公司| 伟巴斯特上海有限公司| 中绿农农业发展有限公司| 深圳贝尔美有限公司| 国际视频通讯有限公司| 阿波罗电子有限公司| 壬鼎实业(上海)有限公司| 纽迪希亚制药有限公司| 酒总酒店设备有限公司| 河北五矿进出口有限公司| 马尔精密量仪苏州有限公司| 北京天健仪表有限公司| 北京中力国际有限公司| 慕斯达渔具无锡有限公司| 三菱电机有限公司 北京| 深圳市麦路嘉食品有限公司| 一丁信息技术有限公司| 陕西铁道电子有限公司| 天津空压机有限公司| 武汉新大酒店有限公司| 北京凯悦制药有限公司| 上海凯尔阀门有限公司| 无锡暖通工程有限公司| 厦门赫比电子有限公司| 新兴的信息技术有限公司| 复地置业发展有限公司| 广州星的塑料制品有限公司 | 创伟 家具有限公司| 深圳市耀嵘有限公司| 田园牧歌现代农业有限公司| 约翰迪尔天拖有限公司| 德鑫五金制品有限公司| 上海南晓消防工程有限公司 | 拓海装饰工程有限公司| 常州厨房设备有限公司| 诚科自动化有限公司| 创宝达电器制品有限公司| 华亿妇幼用品有限公司| 明德自动化设备有限公司| 上海灿瑞半导体有限公司| 温州大 鞋业有限公司| 用不锈钢设备制造有限公司| 深圳中海能源有限公司| 深圳市单仁资讯有限公司| 华美复合材料有限公司| 以色列化工有限公司| 江苏石化设备有限公司| 杭州 led 有限公司| 鼎轩装饰工程有限公司| 柯达(无锡)有限公司| 江门市 矿 有限公司| 杭州中兴达有限公司| 阿尔发汽车配件有限公司| 沈阳塑胶制造有限公司| 上海乐奇食品有限公司| 中兴高达技术有限公司| 河南新开元有限公司| 广州市骏机械设备有限公司| 河北 烛业有限公司| 四川国锂锂材料有限公司| 潍坊智能工程有限公司| 科尼起重机设备上海有限公司| 丰田通商 广州 有限公司| 深圳市德芯电子有限公司| 小狗电器(北京)有限公司| 东莞市化玻仪器有限公司| 华信汽车零部件有限公司| 亚新科噪声与振动技术有限公司| 东莞金刚石工具有限公司| 浙江三维橡胶有限公司| 宏兴机械制造有限公司| 农夫山泉饮用水有限公司| 深圳标域汽车有限公司| 大连思派燃气有限公司| 泰玛服饰深圳有限公司| 北京中芯电子有限公司| 安徽 正荣 有限公司| 金宝盈珠宝有限公司| 四川南玻玻璃有限公司| 济南 畜牧 有限公司| 新典苏州食品有限公司| 北京威特空间有限公司| 普天视电子有限公司| 贝斯特包装有限公司| 四川亚西机器有限公司| 斯泰必鲁斯 江苏 有限公司| 日康食品饮料有限公司| 阿里国际贸易有限公司| 新基德电器有限公司| 诺光照明(苏州)有限公司| 亨斯迈纺织有限公司| 四川四汇建设有限公司| 丹阳 混凝土有限公司| 传化化学品有限公司| 净健净水设备有限公司| 深圳多多服装有限公司| 广州慕服装有限公司| 北京航空安保有限公司| 美鹏机械设备有限公司| 南昌办公设备有限公司| 深圳建辰实业有限公司| 天津利纳马有限公司| 深圳市立捷有限公司| 广州市护肤品有限公司| 苏州易程智能系统有限公司| 天宝有限公司怎么样| 江苏金彭车业有限公司公司| 北京唯尚服装有限公司| 河南日立信有限公司| 金诚小额贷款有限公司| 利丰化妆品有限公司| 上海世家装饰实业有限公司| 北京现代有限公司招聘| 山东智能制造有限公司| 多加多乳业天津有限公司| 捷尔杰设备有限公司| 广州奥迪威电子有限公司| 伟创电脑(苏州)有限公司| 天目电子(深圳)有限公司| 深圳市安邦电子有限公司| 日清纺精密机器有限公司| 重庆腾辉水泥有限公司| 西藏甘露藏药有限公司| 南京福特汽车有限公司| 双鹤机械制造有限公司| 深圳阿诺德有限公司| 钰诚融资租赁有限公司| 丽水 工贸有限公司| 同煤漳泽电力有限公司| 绿维新材料有限公司| 华展电子(深圳)有限公司| 龙威仪器仪表有限公司| 海球(广州)商业有限公司| 苏州辰州电气有限公司| 皆利士多层线路版有限公司| 灵思远景营销顾问有限公司| 业全电子(深圳)有限公司| 成都中兴通讯有限公司| 北京中瑞有限公司怎么样| 深圳明高电子有限公司| 富士电机无锡有限公司| 京西重工(北京)有限公司| 友诚管业有限公司招聘| 浙江麻纺织有限公司| 上海 咖啡有限公司招聘| 湖南湘丰茶业茶业有限公司| 北京耐磨材料有限公司| 上海乐奇食品有限公司| 鑫三合 苏州有限公司| 埃克森美孚太仓有限公司| 上海五矿贸易有限公司| 常州莱尼电气线缆有限公司| 盛隆电气(北京)有限公司| 上海至诚环境有限公司| 泰州中盛光电有限公司| 北京快乐时代有限公司| 鑫三力设备有限公司| 天津雷沃动力有限公司| 新大兴园林有限公司| 重庆庆余堂制药有限公司| 江西三鑫医疗有限公司| 湖南紫测控有限公司| 华东动力机械有限公司| 金利达食品有限公司| 北京北内发动机有限公司| 东莞凯福机电有限公司| 洛阳一拖工程机械有限公司| 厦门太古可口可乐有限公司| 广卓装饰工程有限公司| 上海瀚讯无线技术有限公司| 陶粒支撑剂有限公司| 联合置业武汉有限公司| 欧凯国际贸易有限公司| 方正装饰工程有限公司| 上海海马汽车研发有限公司| 中能电力有限公司待遇| 市鑫宏机械制造有限公司| 江苏钢铁贸易有限公司| 中山好宝宝有限公司| 科成信息技术有限公司| 新奇生电器有限公司| 临沂市塑业有限公司| 百乐保健品有限公司| 中山广日电梯有限公司| 广州敬修堂药业有限公司| 广州晶灵宝石有限公司| 西玛克菲达阀门有限公司| 东莞万裕三信电子有限公司 | 台州消防器材有限公司| 生之源食品有限公司| 成都联塑塑胶有限公司| 深圳市美奥电子有限公司| 深圳彩服装有限公司| 台州黄岩食品有限公司| 深圳吉新电子有限公司| 昂纳信息技术 深圳 有限公司| 奔达康电缆有限公司| 罗斯蒙特仪表有限公司| 南昌汇昌实业有限公司| 中源盛祥担保有限公司| 东方电气工程有限公司| 友信达通讯有限公司| 浙江台州洁具有限公司| 深圳市华拓电子有限公司| 硕士儿童用品有限公司| 深圳市创代电子有限公司| 安川电机 沈阳 有限公司| 武汉精密五金有限公司| 沈阳保温建材有限公司| 青州石油机械有限公司| 上海国有资产经营有限公司| 河北古城香业有限公司| 南京埃斯顿自动化有限公司| 新汇康健康有限公司| 宝酷信息技术有限公司| 深圳博通技术有限公司| 深圳龙赛通信技术有限公司| 赛利涂层技术有限公司| 圳兴利家具有限公司| 广州祺食品有限公司| oki冲电气实业有限公司| 漳州九龙江建设有限公司| 广州巧巧贸易有限公司| 威腾机械制造有限公司| 阳江十八子有限公司| 上海居乐贸易有限公司| 江森汽车内饰件有限公司| 天津海湾阀门有限公司| 深圳旺兴电子有限公司| 交运汽车动力有限公司| 中宝炊具制品有限公司| 鑫坤建筑工程有限公司| 奥联汽车电子电器有限公司| 洛阳永生食品有限公司| 凌志润滑油有限公司| 浙江炊大王有限公司| 美柯达探伤器材有限公司| 机电设备有限公司英文| 东方数码武汉有限公司| 红星机械制造有限公司| 崂山青岛崂山矿泉水有限公司| 太原电力工程有限公司| 德秀服装贸易有限公司| 浙江省天然气有限公司| 北京交大思诺有限公司| 凯源建设工程有限公司| 防火门窗制造有限公司| 洁定医疗器械有限公司| 河北第二建筑工程有限公司| 水星海事技术有限公司| 得理电子(上海)有限公司| 科惠机电设备有限公司| 上海威虹模塑有限公司| 贵州威门药业有限公司| 禾绿回转寿司饮食有限公司| 上海汇普化学品有限公司| 中交融租赁有限公司| 鑫汇精密铸造有限公司| 重庆李尔汽车系统有限公司| 青岛 峰实业有限公司| 重庆品诺食品有限公司| 深圳宏鼎电子有限公司| 天洁环保设备有限公司| 广州市雕塑工艺品有限公司| 陕西一建工程有限公司| 苏州嘉基电子有限公司| 无锡特瑞堡减震器有限公司| 重庆银河仪器有限公司| 南京贝奇尔有限公司| 永宏建设工程有限公司| 管道阀门有限公司怎么样| 深圳市景瑞德有限公司| 深圳智能产品有限公司| 波士顿电梯有限公司| 杭州郝姆斯食品有限公司| 上海长江电子有限公司| 深圳伊达数码有限公司| 奥桑味精食品有限公司| 闪联信息技术有限公司| 金坛建筑安装工程有限公司| 苏州中新金属有限公司| 赛米控电子有限公司| 深圳四季春有限公司| 江苏苏变变压器有限公司| 甘肃照明工程有限公司| 江西昌河汽车有限公司| 北京中晟达有限公司| 必图实业 东莞 有限公司| 理光深圳工业发展有限公司| 宁波腾峰汽车销售有限公司| 上海陆家嘴物业有限公司| 环宇塑料制品有限公司| 天成环保设备有限公司| 美然化妆品有限公司| 地下工程设备有限公司| 云南勐海茶业有限公司| 木林森鞋业有限公司| 高要宏润陶瓷有限公司| 北京开科唯识有限公司| 深圳亚晔实业有限公司| 蓝海进出口有限公司| 中环联合认证中心有限公司| 南京市机械制造有限公司| 施恩婴幼儿营养品有限公司| 温州教学仪器有限公司| 邯郸纺织机机械有限公司| 塔塔信息技术有限公司天津| 香港太古拍卖有限公司| 上海高压油泵有限公司| 中化(青岛)实业有限公司| 上海日科贸易有限公司| 亿迈齿轮(太仓)有限公司| 青岛德盛食品有限公司| 新发小额贷款有限公司| 山东国金电池有限公司| 湖南森康生物有限公司| 光宝旭丽电子有限公司| 纬地信息技术有限公司| 诗婷化妆品有限公司| 上海游泳池设备有限公司| 重庆银翔摩托车有限公司| 杭州中兴达有限公司| 创见资讯上海有限公司| 嘉实多(深圳)有限公司| 山东服装有限公司招聘| 南通系统集成有限公司| 浙江工艺制品有限公司| 江苏捷捷微电子有限公司| 上海管易云计算有限公司| 得力办公用品有限公司| 一缆电线电缆有限公司| 美铝(昆山)铝业有限公司| 中海油气泰州石化有限公司| 无锡电动工具有限公司| 四川有色金属有限公司| 宝福珠宝首饰有限公司| 大连 煤炭有限公司| 温州诚光学有限公司| 东莞全方位有限公司| 深圳安达货运有限公司| 伟视(上海)有限公司| 湖南猎豹汽车有限公司| 深圳市搜了信息技术有限公司 | 厦门大的生物有限公司| 常熟工程塑料有限公司| 深圳源新电子有限公司| 嘉泰宏实业有限公司| 临朐烘干设备有限公司| 济丰包装(上海)有限公司| 上海 管业有限公司招聘| 亨斯迈纺织有限公司| 南平医疗器械有限公司| 丰田通商 广州 有限公司| 中新塑料(广州)有限公司| 深圳国安达有限公司| 现代摩比斯汽车零部件有限公司 | 丰联实业发展有限公司| 浙江中塑塑业有限公司| 华胜机械制造有限公司| 安德食品机械有限公司| 龙宇建筑工程有限公司| 杭州华电江东热电有限公司| 和光光学(苏州)有限公司| 东莞伟旺达有限公司| 中知知识产权有限公司| 广州诺佳贸易有限公司| 中山山木显示技术有限公司| 住友电工制品深圳有限公司| 南通精密铸造有限公司| 兴业幕墙工程有限公司| 食为鲜食品有限公司| 市迪克机械有限公司| 大华格林期货有限公司| 喜相逢乳品有限公司| 亚德客自动化工业有限公司| 北京东方影业有限公司| 温州瑞州建设有限公司| 工程技术顾问有限公司| 安士澳贸易深圳有限公司| 京安工程有限公司招聘| 杭州凯膜技术有限公司| 意创力电子有限公司| 秦皇岛 粮油工业有限公司| 河北新纺织有限公司| 灵镜医疗净化工程有限公司| 佛山三水饮料有限公司| 爱安德深圳有限公司| 太阳宝新能源有限公司| 杭州萧山医药有限公司|