久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

從Windows的角度看Mac OS X上的軟件開(kāi)發(fā)

瀏覽:114日期:2024-01-15 10:28:26

Windows及Mac OS X在操作系統(tǒng)架構(gòu)、開(kāi)發(fā)環(huán)境、API、圖形環(huán)境等環(huán)節(jié)上的相近處與不同的地方,也簡(jiǎn)單提出了跨平臺(tái)應(yīng)用程序開(kāi)發(fā)的兩種策略。事實(shí)上在兩種平臺(tái)上開(kāi)發(fā)所需要了解的概念跟技能沒(méi)有太大的不同,兩種平臺(tái)在性能上的差異也不大。大體說(shuō)來(lái),Windows和Mac OS X都是為桌面應(yīng)用環(huán)境、圖形用戶接口(GUI)而設(shè)計(jì)的操作系統(tǒng)。雖然不同平臺(tái)細(xì)節(jié)各有特色,但兩者相近的抽象概念,其實(shí)遠(yuǎn)遠(yuǎn)多于相左之處。本文試圖指出方向上明顯的異同所在,而非詳細(xì)列舉各種細(xì)項(xiàng)差別。最后,我也將簡(jiǎn)短分享自己在開(kāi)發(fā)跨平臺(tái)軟件時(shí)的一些技巧和心得。

系統(tǒng)架構(gòu)與開(kāi)發(fā)環(huán)境的差異

用最簡(jiǎn)單的話來(lái)說(shuō),Mac OS X與Windows在架構(gòu)與開(kāi)發(fā)環(huán)境上最大的不同點(diǎn)在于:OS X是UNIX也不是UNIX;OS X主要開(kāi)發(fā)工具Xcode使用GCC作為編譯程序,與其他種類的UNIX相同;不過(guò)OS X也有獨(dú)樹(shù)一格的"bundle"軟件包裝格式這樣的東西,成為它與其他操作系統(tǒng)不同之處。

Windows和OS X都屬于現(xiàn)代的操作系統(tǒng),所以Windows在操作系統(tǒng)層級(jí)所提供的功能──執(zhí)行文件與鏈接庫(kù)加載、多任務(wù)與多線程、內(nèi)存管理──在OS X上都找得到對(duì)等的API和作法。不過(guò),相較于Windows在微軟獨(dú)力開(kāi)發(fā)下,架構(gòu)和API都維持著相對(duì)的一貫性(另一方面,也背負(fù)著各種歷史遺跡和向下相容的包袱),Mac OS X則是底層源自NeXTSTEP的Mach微核心(現(xiàn)在稱為XNU),而應(yīng)用層(用準(zhǔn)確的UNIX術(shù)語(yǔ)來(lái)說(shuō)叫userland)來(lái)自FreeBSD 4。這件事情相當(dāng)重要:OS X透過(guò)這樣的架構(gòu),才擁有和一般Linux/FreeBSD相似的UNIX應(yīng)用環(huán)境。有相當(dāng)多Mac軟件開(kāi)發(fā)者喜歡在UNIX shell下工作,使用各種UNIX工具。在Windows上,必須加裝Cygwin之類的環(huán)境才能辦到。

Apple幾年前有則廣告是「把其他牌子的UNIX送進(jìn)/dev/null里」(用過(guò)UNIX的朋友應(yīng)該不難體會(huì)其中的吹噓意涵)。平心而論,OS X受益自UNIX環(huán)境之處不少。尤其,Apple使用了大量的open source工具。舉例來(lái)說(shuō),Apple不像微軟,沒(méi)有自己的C語(yǔ)言編譯工具,Apple用的是UNIX業(yè)界的標(biāo)準(zhǔn)──open source的GCC(其中當(dāng)然有不少OS X的擴(kuò)展功能就是)。雖然Apple有自己的開(kāi)發(fā)環(huán)境Xcode,但是底層采用GCC這件事對(duì)開(kāi)發(fā)者來(lái)說(shuō)是相當(dāng)重要的。同時(shí),Apple的C/C++鏈接庫(kù)用的也是GCC標(biāo)準(zhǔn)的stdc/stdc++。了解這個(gè)差異,在遇到與Microsoft C/C++ compiler不同的地方時(shí),就更容易能找到解答的資源(這類型問(wèn)題往往不限于OS X,其他UNIX平臺(tái)也會(huì)發(fā)現(xiàn))。

但是Mac OS X并不完全是UNIX。它的GUI環(huán)境(Aqua)就完全不是一般Linux/FreeBSD所使用的X11。而在UNIX層之下的微核心也和其他UNIX不同。接下來(lái)這一點(diǎn)很重要:OS X雖然有和Windows .EXE和.DLL相對(duì)應(yīng)的文件(OS X跟其他UNIX一樣,可執(zhí)行文件一般不加擴(kuò)展名,UNIX系的動(dòng)態(tài)加載鏈接庫(kù)則冠以.dylib),但更重要的架構(gòu)差異是bundle。

Bundle概念承襲自NeXTSTEP。簡(jiǎn)單來(lái)說(shuō),就是由操作系統(tǒng)提供一種類似對(duì)象封裝的文件包裹。OS X上最常見(jiàn)的bundle要屬.app結(jié)尾的應(yīng)用程序了。雖然.app外觀上是個(gè)文件,在UNIX shell下看就能發(fā)現(xiàn)它其實(shí)是個(gè)目錄,內(nèi)含各種metadata(通常至少會(huì)有一個(gè)名為Info.plist的數(shù)據(jù)文件)、可執(zhí)行文件、動(dòng)態(tài)鏈接模塊、各種資源等。除了.app外,OS X的各種框架檔(以.framework結(jié)尾,是一種同時(shí)包含頭文件及鏈接庫(kù)的包裝)、應(yīng)用程序的外掛模塊(通常以.bundle結(jié)尾)等等,都是以bundle形式呈現(xiàn)的。了解這個(gè)差異,才能了解為什么OS X上很少有程序需要額外的安裝程序,也鮮少聽(tīng)說(shuō)有所謂的"DLL hell"(因共享鏈接庫(kù)版本不兼容造成的困擾)。

項(xiàng)目 Windows Mac OS X

操作系統(tǒng)最近桌面版本 Windows Vista Mac OS X 10.5 Leopard操作系統(tǒng)核心 NT Kernel XNUCLI Shell環(huán)境 CMD.EXE UNIX shell (bash/tcsh/etc., 可使用Terminal.app一類的終端機(jī)軟件進(jìn)入)GUI (Shell) 環(huán)境 Windows Explorer Aqua (Finder)程序二進(jìn)制文件格式 Portable Executable (PE): .EXE, .DLL Mach-O "universal" binary (可執(zhí)行文件通常不帶附加名,DLL結(jié)尾為.dylib)用來(lái)辨認(rèn)軟件組件的方式 GUID bundle identifier (Java式的id,例如com.apple.TextEdit)廠商提供或販賣的開(kāi)發(fā)環(huán)境 Microsoft Visual Studio Xcode可視化的GUI制作工具 Visual Studio內(nèi)建的WinForm designer Interface BuilderC編譯程序 Microsoft C Compiler GCC

表一:Windows與Mac OS X在架構(gòu)上的對(duì)照

開(kāi)發(fā)語(yǔ)言與API;Objecitve-C, Core API, Carbon, Cocoa

如果使用微軟工具來(lái)開(kāi)發(fā)Windows軟件,就一定會(huì)碰到Platform SDK,MFC或者.Net平臺(tái),同時(shí),也相對(duì)應(yīng)到C、C++、C#和其他.Net平臺(tái)所提供的語(yǔ)言(這種區(qū)分并不是絕對(duì)的,僅僅是為了方便接下來(lái)的模擬所做的簡(jiǎn)化)。在OS X上,Apple則是鼓勵(lì)大家盡量采用Objective-C作為開(kāi)發(fā)語(yǔ)言,并且熟悉Cocoa。

接下來(lái)的問(wèn)題既尷尬又麻煩。很多人會(huì)問(wèn):我們是否非學(xué)Objective-C不可?另外一個(gè)常見(jiàn)的問(wèn)題是:Apple不是也有名叫Carbon的C API嗎?(延伸出來(lái)的問(wèn)題則是:可不可以用C++開(kāi)發(fā)Mac程序?)。

簡(jiǎn)單的答案(同時(shí)一定程度上也代表Apple的態(tài)度)是:要用Objective-C才能完全發(fā)揮OS X圖形應(yīng)用環(huán)境的長(zhǎng)處,而Cocoa這個(gè)用Objective-C寫(xiě)成的API framework就是最佳的施力點(diǎn)。#p#分頁(yè)標(biāo)題#e#

復(fù)雜的答案則是這樣:

OS X的本體,也就是所有非UNIX的部份,并不像Windows一開(kāi)始就(幾乎)全以C寫(xiě)成的。因此OS X沒(méi)有所謂"Win32 API"這么純粹的東西。OS X核心的、非GUI的服務(wù)和鏈接庫(kù),有時(shí)稱為"Core API"。Core API大部分以C寫(xiě)成,并且多半奠基于CoreFoundation這套鏈接庫(kù)之上。CoreFoundation提供了一貫的內(nèi)存管理模式(CFRetain, CFRelease)、基礎(chǔ)的數(shù)據(jù)型別(字符串、數(shù)組、字典)、property list文件管理、文件、網(wǎng)絡(luò)存取等等。CoreFoundation使用上跟Win32 API有點(diǎn)相似,都透過(guò)存取handle的方式來(lái)達(dá)到某種近似「用C語(yǔ)言操作對(duì)象」的效果。但CoreFoundation最大的不同在于它還有reference counting的內(nèi)存管理模式,大幅簡(jiǎn)化了內(nèi)存管理的復(fù)雜性。

至于Carbon,嚴(yán)格說(shuō)來(lái),是Mac OS X在發(fā)行之初,為了維持與Mac OS 9兼容,才提供一套以C寫(xiě)成的GUI工具集,主要包括所有的GUI組件(Apple 稱為 HIToolbox ,HI 意思是 Human Interface)以及所有OS X之前的API(QuickDraw等等)。隨著OS X 10.5的推出,Apple漸漸舍棄了舊式的API ,鼓勵(lì)大家使用Objective-C寫(xiě)成的Cocoa來(lái)開(kāi)發(fā)程序。Carbon現(xiàn)在的意義等于就是HIToolbox,也就是OS X GUI 的C API。

但是,Apple在2007年夏天做了重大的宣布;Carbon不會(huì)有64-bit的版本。也就是說(shuō)這一套C API是「沒(méi)有未來(lái)」的。這意味著所有使用Carbon寫(xiě)成的軟件──Microsoft Office、Adobe Photoshop都不可能順利過(guò)渡到64-bit。至于像QT這一類跨平臺(tái)的GUI kit也勢(shì)必要順應(yīng)這項(xiàng)改變。

其實(shí)Objective-C并不難學(xué)。由C轉(zhuǎn)換到C++/C#時(shí)需要學(xué)習(xí)很多新觀念、新用語(yǔ),但Objective-C大體上只是在C語(yǔ)言上加上一層薄薄的、動(dòng)態(tài)的面向?qū)ο髮印ocoa則是相當(dāng)容易上手的API。透過(guò)Cocoa就可以用面向?qū)ο蟮姆绞酱嫒S X八成上的系統(tǒng)服務(wù)(其余兩成可以用C來(lái)呼叫)。Objective-C可以跟C完全混用。同時(shí)Apple也提供了所謂的"Objective-C++",可以在C++程序中呼叫Objective-C程序,或者在Objective-C里撰寫(xiě)C++程序代碼。Apple自家的瀏覽器Safari就有不少核心的程序代碼(WebKit)使用了Objective-C++來(lái)撰寫(xiě)。

項(xiàng)目 Windows Mac OS X主要開(kāi)發(fā)語(yǔ)言 C/C++/C#(及其他.Net支持的語(yǔ)言,如C++/CLI) Objective-C/Objective-C++/C/C++操作系統(tǒng)服務(wù) Win32 API 系統(tǒng)服務(wù)多半可從POSIX layer用stdc/stdc++取用系統(tǒng)核心服務(wù) Win32 API CoreFoundation/CoreServices繪圖與GUI Win32 (GDI32, USER32) Quartz (C API)/HIToolBox (Carbon)/AppKit (Cocoa)面向?qū)ο蟮腁PI .NET Framework/MFC Cocoa面向?qū)ο蟮腉UI及繪圖系統(tǒng) WPF/GDI (with MFC) AppKit (Cocoa)以及Cocoa Graphics桌面應(yīng)用程序的數(shù)據(jù)庫(kù)方案 ODBC/ADO.Net CoreData基礎(chǔ)繪圖系統(tǒng)使用的單位 Pixel (GDI) Point (Quartz)默認(rèn)的屏幕分辨率 96 DPI 72 DPI

表二:開(kāi)發(fā)語(yǔ)言與API的對(duì)照

圖形作業(yè)環(huán)境的差異:繪圖系統(tǒng)

大家對(duì)OS X最主要的印象,想必還是它的圖形作業(yè)環(huán)境。GUI的確是OS X與Windows差異最多的地方。

在Windows環(huán)境里,傳統(tǒng)上Win32 API同時(shí)包括了繪圖(所謂的GDI/GDI+)和GUI組件(窗口、對(duì)話盒、按鈕等等)的操作。到了.Net 3.0有所謂的WPF (Windows Presentation Foundation)。嚴(yán)格說(shuō)來(lái)所有Windows上的概念和組件,都可以在OS X上找到相對(duì)應(yīng)的作法。但是在架構(gòu)上OS X確實(shí)和Windows有相當(dāng)大的差異。

OS X的繪圖系統(tǒng)核心是Quartz。Quartz的繪圖基礎(chǔ)概念是路徑(path),而不是像素(pixel)。驚人的事實(shí)是:Quartz是一套PDF繪圖系統(tǒng)。所有Quartz能繪制的對(duì)象都能輕易轉(zhuǎn)換為PDF文件。至于在圖像處理上,Quartz提供了一套完整的合成模型(compositing model)。簡(jiǎn)單地說(shuō),Quartz賦予了Mac OS X極為優(yōu)異的繪圖能力。從一些細(xì)節(jié)就可以看出Quartz在視覺(jué)上的細(xì)致度:例如,OS X在顯示字型時(shí)的去鋸齒(anti-aliasing)處理就要比Windows來(lái)得細(xì)膩,在點(diǎn)陣影像的縮放上效果也往往比Windows好。OS X的應(yīng)用程序可以輕易做出各種透明度的圖層、以及為圖形對(duì)象加上陰影、或者繪制不規(guī)則形狀(但這并不代表你應(yīng)該只是為了為了吹噓而濫用這些功能,我們馬上會(huì)提到用戶體驗(yàn)這件事)。倒是有個(gè)細(xì)節(jié)應(yīng)該馬上一提,那就是Quartz的默認(rèn)分辨率是72 DPI,所使用的單位是點(diǎn)(point),這跟PDF繪圖系統(tǒng)是一致的,和Windows預(yù)設(shè)為96 DPI、以像素為單位的點(diǎn)陣式繪圖系統(tǒng)很不一樣。這在一開(kāi)始可能很困擾人。因?yàn)樵贠S X上,不改變屏幕設(shè)定的情況下,12 pt的字,就真的會(huì)被會(huì)繪制成12 px(而在Windows上,12 pt卻是16 px)。同時(shí),Quartz默認(rèn)的坐標(biāo)系統(tǒng)跟數(shù)學(xué)上的習(xí)慣相同,也就是(0, 0)坐標(biāo)起點(diǎn)是位于左下方,而不是一般計(jì)算機(jī)繪圖使用的左上方(當(dāng)然,Quartz有各種坐標(biāo)變換功能,因此當(dāng)然還是可以把(0, 0)設(shè)定為左上方的)。

看似復(fù)雜,然而,當(dāng)你開(kāi)始想輸出PDF(打印作業(yè)大幅簡(jiǎn)化)或進(jìn)行精細(xì)的繪圖工作時(shí),慢慢就會(huì)發(fā)現(xiàn)Quartz這樣設(shè)計(jì)的直觀了。

另外,Quartz的基礎(chǔ)API是以C寫(xiě)成的,所有對(duì)象操作方式都跟CoreFoundation一樣(從Quartz建立的對(duì)象都是用reference counting的方式在管理內(nèi)存,同時(shí)也都可以用CFRelease來(lái)釋放)。不過(guò),Cocoa也提供了絕大多數(shù)的API對(duì)應(yīng)。使用Objective-C來(lái)操作繪圖對(duì)象會(huì)更輕松些。

在Quartz之上,或者與Quartz并行的,還有Apple的各種圖形和媒體相關(guān)的子系統(tǒng)。諸如可以快速制作動(dòng)畫(huà)的Quartz Composer、新一代文字輸出編排系統(tǒng)CoreText、應(yīng)用層的2D動(dòng)畫(huà)系統(tǒng)CoreAnimation,以及Apple的招牌多媒體架構(gòu)QuickTime,還有業(yè)界標(biāo)準(zhǔn)的OpenGL,這些構(gòu)成了Mac OS X在視覺(jué)及媒體經(jīng)驗(yàn)上的核心。#p#分頁(yè)標(biāo)題#e#

圖形作業(yè)環(huán)境的差異:GUI,以及,用戶體驗(yàn)

Windows上,尤其是Win32 API里面,絕大多數(shù)關(guān)于GUI的概念和技能,都可以直接轉(zhuǎn)換到OS X上。OS X的GUI同樣是采用事件驅(qū)動(dòng)模型(event-driven model)來(lái)設(shè)計(jì)的,每個(gè)GUI應(yīng)用程序同樣都有所謂的run loop(或稱event loop/message loop)。兩者甚至在某些系統(tǒng)限制上也雷同:例如,.Net跟Cocoa都不鼓勵(lì)或甚至禁止程序在主線程以外的地方創(chuàng)建或操作GUI對(duì)象。

盡管如此,GUI是造就Mac OS X在外觀上與其他平臺(tái)不同的最大要素。與之相伴的是OS X對(duì)于用戶體驗(yàn)近乎執(zhí)著的追求。

OS X在GUI上并沒(méi)有一個(gè)特別的子系統(tǒng)。通常我們用接觸到的API來(lái)區(qū)分。好比說(shuō)如果用的是Carbon我們會(huì)稱為HIToolkit,如果用的是Cocoa則會(huì)說(shuō)是AppKit(Cocoa主要是由非GUI的Foundation──不要和CoreFoudation搞混了──以及提供GUI組件的AppKit所組成的)。Apple的開(kāi)發(fā)工具中并沒(méi)有類似Visual Basic一類把接口畫(huà)完、在組件上點(diǎn)兩下鼠標(biāo),把程序填進(jìn)去就完成應(yīng)用程序的工具或流程。最接近的是Interface Builder (IB)這套工具。IB做出來(lái)的.nib文件其實(shí)就是封存好的GUI對(duì)象,生成之后再回Xcode將必要的連結(jié)關(guān)系拉完,程序代碼填上(通常量不會(huì)很多)就完成程序了。IB會(huì)是Xcode以外,OS X開(kāi)發(fā)者最常用的工具。

OS X提供的GUI組件特色為細(xì)膩、一致、直觀。這并不代表OS X的GUI無(wú)法做復(fù)雜的設(shè)定和客制化。但是相較之下,OS X的應(yīng)用程序更傾向于善用或組合現(xiàn)有的視覺(jué)元素,而較少自創(chuàng)新的custom control。這一點(diǎn)和Windows上,尤其是小型工具程序,喜歡一種程序就創(chuàng)造一種視覺(jué)風(fēng)格,或是大量提供使用者可更換的skin,有著相當(dāng)大的文化差異。雖然Apple自家的軟件跟微軟相似,喜歡提前使用下一個(gè)版本才出現(xiàn)的視覺(jué)風(fēng)格或元素,有時(shí)讓開(kāi)發(fā)者覺(jué)得難以捉摸,但大體上遵守Apple自家的HIG (Human Interface Guideline)還是常態(tài)。

我們提到了文化差異;OS X在視覺(jué)上的細(xì)膩,以及對(duì)用戶體驗(yàn)的追求,造就了一種高要求的文化。這可以說(shuō)是一種正向循環(huán)。我們或許很少聽(tīng)說(shuō)哪個(gè)Windows開(kāi)發(fā)者會(huì)為了icon向左偏了1 pixel而大改特改,或是要求自己的軟件要在視覺(jué)及操作上符合哪個(gè)規(guī)范的一致性。但OS X的開(kāi)發(fā)者真的會(huì)談?wù)摬?yán)肅看待這件事情(著名的icon設(shè)計(jì)商IconFactory以及獨(dú)立軟件商Panic是著名的兩個(gè)代表),同樣的也有相當(dāng)多OS X使用者以同樣嚴(yán)苛的標(biāo)準(zhǔn)看待他們使用的軟件,甚至可能寫(xiě)信告訴你,指出你的軟件在用戶體驗(yàn)或視覺(jué)設(shè)計(jì)上的缺陷(筆者就曾經(jīng)收到使用者來(lái)信,指出筆者的一個(gè)軟件在pull-down menu中使用的icon「語(yǔ)意」不合乎用戶對(duì)該種GUI組件的期待)。又好比說(shuō),從OS X 10.5 Leopard開(kāi)始,icon最大可以大到512x512,Apple也強(qiáng)烈建議開(kāi)發(fā)者要準(zhǔn)備這么大的尺寸(除了原有的16x16、32x32、128x128之外)。這當(dāng)然無(wú)形中提高了開(kāi)發(fā)的挑戰(zhàn)。Windows在XP以前僅支持16x16、32x32、48x48,直到Vista才開(kāi)始加大到64x64和256x256。

另一個(gè)與GUI不直接相關(guān),但卻影響用戶體驗(yàn)的,是OS X的本地化(localization)系統(tǒng)。這一點(diǎn)也是和Windows不同的地方。OS X因?yàn)橛衎undle的設(shè)計(jì),因此能讓一個(gè)應(yīng)用程序同時(shí)包裝各種不同語(yǔ)系的資源文件,同時(shí)開(kāi)發(fā)多語(yǔ)系程序在OS X上也相對(duì)容易(通常是以提供各種不同版本的.nib bundle放進(jìn)應(yīng)用程序bundle中Content/Resources/底下以語(yǔ)系區(qū)域來(lái)區(qū)分的子目錄中就完成了。Windows程序設(shè)計(jì)一向以"resource file"概念來(lái)管理icon及本地化等「外部」資源,名稱相似,開(kāi)發(fā)方式卻不那么一貫而直觀;另外,OS X的語(yǔ)系是可以按照順序fallback的,例如要是繁體中文語(yǔ)系檔找不到,而用戶在語(yǔ)言設(shè)定中將簡(jiǎn)體中文設(shè)定在繁體中文的后頭,那么OS X便會(huì)嘗試套用簡(jiǎn)體中文語(yǔ)系檔),結(jié)果是OS X使用者對(duì)本地化同樣有著高標(biāo)準(zhǔn)與高期待。另一方面,筆者也建議大家,除非軟件確定只有中文用戶使用,不然一開(kāi)始先以英文界面開(kāi)發(fā),再加上中文的本地化資源,以長(zhǎng)期來(lái)說(shuō)是值得(甚至是必要)的投資。

一些較難歸類但同樣重要的差別

Mac OS X跟Windows在軟件開(kāi)發(fā)作法上的差異還有很多,上述只就最大的方向差異闡釋。有些較細(xì)微但值得一提的差別,我們也在這里簡(jiǎn)單說(shuō)明。

首先,OS X跟Windows一樣,內(nèi)部字符串編碼以Unicode為準(zhǔn)。但在操作系統(tǒng)不同的層級(jí),使用方式并不相同。Windows的Unicode layer很一致地使用了UTF-16作為編碼,并偏好使用BOM輔助判別。OS X的文件系統(tǒng)使用UTF-8,而CoreFoundation及Cocoa則用UTF-16。如果使用Cocoa自己的serialization機(jī)制,Cocoa會(huì)正確儲(chǔ)存和還原UTF-16的位順序。不過(guò),筆者自己建議,盡可能使用UTF-8作為各種交換時(shí)的編碼(相對(duì)于Windows對(duì)于UTF-8的支持不夠干脆簡(jiǎn)明,Cocoa自己就提供了像stringWithUTF8String以及UTF8String兩種NSString的method,方便在native string與UTF-8間的游走)。

其次,相對(duì)于Windows使用registry來(lái)管理應(yīng)用程序設(shè)定,Mac OS X使用的是一種叫做property list(文件擴(kuò)展名為.plist,簡(jiǎn)稱plist)的XML文件。Plist可以直接變成CoreFoundation及Cocoa的各種容器對(duì)象,也可以將后者輕易地serialize成plist。因此OS X上的應(yīng)用程序大量使用plist作為配置文件的格式,甚至作為數(shù)據(jù)單元格式。將設(shè)定用個(gè)別文件儲(chǔ)存也減少了Windows集中管理registry所帶來(lái)的各種弊病。

Mac OS X并不使用COM (Component Object Model)來(lái)作為面向?qū)ο蟮倪M(jìn)程間通信(IPC; interprocess communication)的機(jī)制。因?yàn)橛肅ocoa寫(xiě)成的程序,可以透過(guò)Objective-C Distributed Object (DO)這個(gè)強(qiáng)大機(jī)制來(lái)達(dá)成IPC的任務(wù)。除此之外,因?yàn)閎undle架構(gòu),OS X軟件要設(shè)計(jì)外掛模塊架構(gòu)也相當(dāng)容易。OS X有相當(dāng)多支持外掛的應(yīng)用程序,應(yīng)歸功于這種開(kāi)發(fā)上的便利度。

OS X應(yīng)用程序能夠利用所有OS X在UNIX環(huán)境上所提供的功能。同時(shí)OS X一安裝好就已經(jīng)幫你準(zhǔn)備好了大量的open source鏈接庫(kù),例如可用來(lái)制作密碼密鑰認(rèn)證的OpenSSL、負(fù)責(zé)解壓縮的libz、內(nèi)嵌式數(shù)據(jù)庫(kù)引擎SQLite等等。這些都是加速開(kāi)發(fā)的好幫手。#p#分頁(yè)標(biāo)題#e#

最后要提的是,正因?yàn)镺S X的文化與Windows有許多不同處,筆者建議跨足OS X的開(kāi)發(fā)者應(yīng)該要盡可能貼近甚至配合OS X的習(xí)慣。舉例來(lái)說(shuō),大多數(shù)OS X應(yīng)用程序都不需要安裝程序,只需要直接將軟件拷貝到想要存放的目錄(通常是/Applications)即可。而解安裝也就直接刪除該.app bundle就解決了。在Windows上就沒(méi)那么容易了(特別是有相當(dāng)多組件依存關(guān)系的軟件)。這些都是開(kāi)發(fā)上需要注意的地方,但是開(kāi)發(fā)者多付出一份心力,使用者就會(huì)多一份便利,終究會(huì)得到用戶肯定的。

項(xiàng)目; Windows; Mac OS X 系統(tǒng)內(nèi)部編碼 Unicode (UTF-16) Unicode (文件系統(tǒng)使用 UTF-8, 系統(tǒng)API一般使用 CFString/NSString, 內(nèi)部使用UTF-16)語(yǔ)系處理 區(qū)分Codepage 不區(qū)分Codepage應(yīng)用程序的設(shè)定管理方式 Windows registry Property list filesIPC的幾種方式 COM/Windows RPC Objective-C Distributed Object/Apple Event/BSD Socket腳本語(yǔ)言的支持 VBScript/JScript/CScript/DOS Batch script AppleScript/Perl/Ruby/Python/shell script

表三:一些重要的系統(tǒng)特性(摘錄)

項(xiàng)目 Windows (.NET) Mac OS X (Cocoa)字符串處理 System.String NSString 數(shù)據(jù)結(jié)構(gòu)與容器 System.Collections NSArray/NSDictionary/etc. HTTP網(wǎng)絡(luò)存取 System.Net System.Net,NSURLConnectionXML解譯 System.XML NSXMLDocument etc.

表四:幾個(gè)代表性的.NET namespace/class在Cocoa中的對(duì)應(yīng)class

跨平臺(tái)的建議

最后簡(jiǎn)短分享一些跨平臺(tái)軟件開(kāi)發(fā)所可能遇到的問(wèn)題。

要同時(shí)在Windows和Mac上開(kāi)發(fā),有兩種可能的思維方式。一種是追求真正的"write once, run everywhere"。此時(shí)開(kāi)發(fā)的選擇,可能是采用Java平臺(tái),Adobe的AIR,抑或使用C++搭配像QT這樣的跨平臺(tái)鏈接庫(kù)。這三種主流方案各有千秋,但在視覺(jué)和用戶體驗(yàn)上往往皆無(wú)法與原生(native)的Mac應(yīng)用程序相比。

因此,另一個(gè)方向則是體認(rèn)到,要保有Windows及Mac各自平臺(tái)的特長(zhǎng),就必須割舍GUI跨平臺(tái)的可能性。也就是說(shuō),GUI是最無(wú)法移植到其他平臺(tái)的部分。我們能做的是將共通的邏輯部分獨(dú)立出來(lái),然后開(kāi)發(fā)兩套前端接口(frontend)。若以在Windows及Mac上皆能使用為前提,共通邏輯開(kāi)發(fā)語(yǔ)言的選擇就很少了,不是C就是C++。所幸Windows和Mac上具有平臺(tái)特色的語(yǔ)言,要和C++結(jié)合,也不是那么困難的事(在.Net上是透過(guò)C++/CLI,在Mac上是透過(guò)Objective-C++這兩種擴(kuò)展的語(yǔ)言)。

不過(guò),在開(kāi)發(fā)共享部分的時(shí)候,最容易碰到的問(wèn)題,恐怕還是要如何省下力氣去做例如解譯XML文件、存取網(wǎng)絡(luò)這一類不是GUI的工作。這類工作的麻煩在于,Windows和Mac都各自提供了相當(dāng)便利、但也絕對(duì)和平臺(tái)相依的鏈接庫(kù)(例如.Net的System.Xml,Cocoa的NSXMLDocument)。在這種情況下,我們也大體有兩種選擇:不是全部采用跨平臺(tái)的鏈接庫(kù)(例如使用expat來(lái)解譯XML),就是善用面向?qū)ο蟮某橄蠡约癆bstract Factory這樣的設(shè)計(jì)模式(design pattern),讓程序邏輯呼叫抽象的接口,然后在于各自平臺(tái)的版本中藉由呼叫平臺(tái)相依的API來(lái)實(shí)現(xiàn)這些對(duì)象。

結(jié)論

本文簡(jiǎn)要地討論了Windows及Mac OS X在操作系統(tǒng)架構(gòu)、開(kāi)發(fā)環(huán)境、API、圖形環(huán)境等環(huán)節(jié)上的相近處與不同的地方,也簡(jiǎn)單提出了跨平臺(tái)應(yīng)用程序開(kāi)發(fā)的兩種策略。事實(shí)上在兩種平臺(tái)上開(kāi)發(fā)所需要了解的概念跟技能沒(méi)有太大的不同,兩種平臺(tái)在性能上的差異也不大,但是在實(shí)現(xiàn)細(xì)節(jié)、視覺(jué)表現(xiàn)與用戶體驗(yàn)上,OS X有自身獨(dú)特的風(fēng)格與文化。OS X軟件開(kāi)發(fā)社群常常說(shuō)要"be a good Mac citizen"意思也就在此。了解這些差異和獨(dú)特性是撰寫(xiě)合宜的OS X軟件的第一步。

標(biāo)簽: Windows系統(tǒng)
相關(guān)文章:
主站蜘蛛池模板: av中文字幕网 | 亚洲日韩中文字幕一区 | 久久久久久久成人 | 欧美一区二区三区 | 成人久久18免费网站图片 | 欧美日韩一区二区三区免费视频 | 国产成人精品久久 | 天天久久 | 精品一区二区三区免费 | 国产午夜精品一区二区三区 | www久久99| 亚洲精选国产 | 亚洲激情av | 精品一区二区三区免费 | 蜜桃官网 | 欧美一级在线视频 | 高清av网址 | 亚洲精品视频免费 | av免费在线播放 | 欧美在线网站 | 久久一区二区视频 | 亚洲一区二区在线视频 | 亚洲免费国产视频 | 久久久精品一区二区 | 一级大片av| 欧美电影一区 | 免费看的毛片 | 亚洲成人久久久久 | 综合网在线 | 九九精品免费视频 | www中文字幕 | 中文字幕在线观看 | 成人免费视频观看视频 | 色婷婷网| 91色在线观看 | 欧美成人免费一级人片100 | 日韩精品av一区二区三区 | 三级色黄 | 国产精品一区二区不卡 | 日本天天操 | 在线看国产 | 久久精品亚洲 | 国产精品久久久久久久电影 | 成人福利在线观看 | av网站观看 | 卡通动漫第一页 | 亚洲精品一区二区三区不 | 国内精品视频一区二区三区八戒 | 成人免费毛片aaaaaa片 | 国产激情毛片 | 日本久久精品视频 | 天天操天天舔天天爽 | 久久久国产精品一区 | 亚洲国产福利一区 | 亚洲国产精品成人无久久精品 | 久久99视频| 亚洲欧美激情精品一区二区 | www.色涩涩.com网站 | 色婷婷久久久swag精品 | 亚洲精品一区二三区 | 九九热视频在线 | 欧美一区永久视频免费观看 | 人人澡人人射 | www.一区二区三区 | 精品免费视频 | 成年人性视频 | 福利在线看| 国产一区二区在线免费观看 | 精品1区| 国产精品入口麻豆www | 成人精品 | 国产精品成人在线观看 | 亚洲欧美高清 | 欧美一区日韩一区 | 在线播放国产精品 | 在线视频se| 激情久久久 | 国产精品二区三区 | 亚洲久久在线 | 久久久久一区二区三区 | 亚洲二区在线观看 | a级三四级黄大片 | 大吊一区二区 | 成人av影视在线观看 | 男女激情网址 | 精品99视频| 特级毛片 | 插插射啊爱视频日a级 | 日韩综合一区二区 | 欧洲一区二区在线观看 | 国产一级免费在线观看 | 天天干干| 久久精品国产99国产精品 | 婷婷综合五月 | 欧美精品一级 | 91精品国产高清一区二区三区 | 成年人免费看片 | 日韩在线观看成人 | 久久久片 | 亚洲一区视频在线 | 国产日韩欧美 | 国产精品a久久 | 99看片 | 国产一区二区视频免费看 | 欧美亚洲一 | 久久久久久日产精品 | 国产欧美精品在线 | 97国产精品视频人人做人人爱 | 亚洲视频在线观看免费 | 免费观看一级特黄欧美大片 | 九九热在线免费视频 | 综合伊人久久 | 91精品国产人妻国产毛片在线 | 久久久久久久一区 | 日韩一区电影 | 七龙珠z普通话国语版在线观看 | 国产精品久久久av | 久久99精品国产99久久6男男 | 久久99精品国产99久久6尤 | 亚洲第一黄 | 国产一区二区三区在线 | 久久久久久久香蕉 | 国产剧情一区二区 | 国产精品第一国产精品 | 精品国产欧美一区二区三区不卡 | 亚洲欧美日韩系列 | 国产91综合一区在线观看 | 中文字幕一区二区三区四区五区 | 久久久久久久久成人 | 天天射日日操 | 亚洲免费婷婷 | 日韩欧美在线播放视频 | 国产精品视频免费观看 | 精品久久久久一区二区国产 | 七七婷婷婷婷精品国产 | 91一区| 国产午夜视频 | 欧美一区二区三区四区视频 | 国产成人精品高清久久 | 国内精品视频一区二区三区八戒 | 一区二区色 | 涩涩视频在线 | 久久另类ts人妖一区二区 | 国产二区视频 | 色www精品视频在线观看 | 三级黄色片在线观看 | 国产aaaaav久久久一区二区 | 四虎永久在线 | 亚洲精品一二三区 | 天天干狠狠干 | 日韩av一区二区三区四区 | 国产精品日韩三级 | 99久久婷婷国产精品综合 | 中文字幕精品一区久久久久 | 久久久91 | 成人午夜精品一区二区三区 | 国产精品美乳一区二区免费 | 在线中文字幕日韩 | 91色在线| 国产成人网 | 国产精品国产三级国产aⅴ 精品91 | 99精品99| 在线91| 国产激情视频在线 | 天堂亚洲 | 久久精品色欧美aⅴ一区二区 | 成人性毛片 | 亚洲精品国产第一综合99久久 | 97久久久国产精品 | 美女午夜影院 | 国产精品视频一区二区三区不卡 | 国产综合视频在线播放 | 成人a级网站 | 国产色在线 | 久久高清亚洲 | 美女精品视频在线 | 91中文字幕在线 | 九九成人 | av在线入口| 日韩在线字幕 | 视频在线一区二区 | 精品欧美一区二区精品久久久 | 亚洲精品视频在线看 | 一区二区三区在线看 | 伊人网视频 | 一区二区三区四区在线视频 | 性处破╳╳╳高清欧美 | 欧美福利影院 | 婷婷久久综合九色综合绿巨人 | 亚洲精品一区二区三区中文字幕 | 中文字幕视频在线免费观看 | 久久久久综合狠狠综合日本高清 | 国产日本韩国在线 | 日韩a视频 | 99伊人| 亚洲国产视频网站 | 亚洲一级毛片 | 日日干夜夜干 | 欧美不卡一区二区三区 | 在线视频成人永久免费 | 午夜影院免费观看 | 日本阿v视频高清在线中文 中文二区 | 成人在线观看网 | 久久成人综合 | 日韩国产一区二区三区 | 成人精品视频一区二区三区 | 国产乱码精品一区二区三区中文 | 久久久av亚洲男天堂 | 免费视频爱爱太爽了 | 亚洲成人基地 | 日韩高清中文字幕 | 一本大道久久a久久精二百 亚洲欧美高清 | 亚洲午夜精品一区二区三区 | 国产中文字幕一区二区三区 | 伊人春色成人 | 日韩在线观看视频一区二区三区 | 欧美成人免费观看 | 草樱av | 久久手机免费视频 | 一级毛片视频 | 97伦理片| 激情视频在线观看 | 亚洲成人在线网站 | 亚洲国产一区二区在线观看 | 欧美成人精品一区二区 | 草久av | 欧美日韩中文字幕在线 | 日韩国产欧美在线观看 | 日韩成人短视频 | 色橹橹欧美在线观看视频高清 | 蜜月va乱码一区二区三区 | 欧美日韩在线播放 | 久久国产精品免费一区二区三区 | 欧美理论片在线观看 | 久久国| 精品久久久久久久久久久久 | 日本亚洲国产一区二区三区 | 午夜私人影院 | 91久久国产| 欧美日韩国产一区二区三区 | 日日日操 | 伊人av成人| 久久久久999 | 91精彩视频在线观看 | a久久| 亚洲精品中文字幕 | 在线观看日韩av | 日韩视频一区二区三区四区 | 一区在线观看视频 | 九色国产 | 精品久久av| 久久久成人精品 | 91精品国产综合久久久久久 | 国产精品久久久久久久久免费桃花 | sese综合| 色先锋影音 | 亚洲 欧美日韩 国产 中文 | 精品国产黄a∨片高清在线 激情网站免费 | 男女免费在线观看视频 | 欧美一区二区免费 | 欧美2区 | 狠狠操一区二区三区 | 亚洲人成人一区二区在线观看 | 精品久久久久久久久久 | 九一亚洲精品 | 国产97久久 | 天天影视色香欲 | 亚洲欧美综合精品久久成人 | 在线欧美日韩 | 欧美日韩国产免费一区二区三区 | 一区日韩| 久久国产精品一区 | 欧美精品一区三区 | 在线免费看黄视频 | 日韩欧美中文字幕在线视频 | 国产亚洲精品久久久久动 | 九九在线国产视频 | 91精品在线播放 | 在线第一页 | 日韩久久综合 | 国产精品视频免费观看 | 精品国产乱码久久久久久88av | 婷婷国产在线观看 | 国产综合一区二区 | 国产日韩中文字幕 | 久久精品一 | 午夜视频免费 | 国产一区二区久久久 | 欧美一区在线观看视频 | 狠狠综合久久 | 亚洲www视频| 美女视频一区二区三区 | 狠狠躁夜夜躁人人爽天天高潮 | www.fefe66.com| av在线免费网址 | 久久精品一区二区 | 国产乱码精品一区二区三区忘忧草 | 欧美精品在线观看免费 | 黄篇网址 | 一区日韩 | 欧美成人一区二区三区片免费 | 日本不卡免费新一二三区 | 亚色在线 | 欧美一级片毛片免费观看视频 | 狠狠色狠狠色综合网 | 亚洲伊人久久网 | 少妇性l交大片免费一 | 欧美一级视频在线观看 | 91极品国产 | 欧美亚洲天堂 | 日本在线观看网站 | 亚洲 欧美日韩 国产 中文 | 久久人| 日韩精品一区二区三区中文在线 | 一区二区三区四区在线 | 精品一区在线视频 | 国产福利在线观看 | 日日夜夜精品 | 日韩精品一区二区三区四区视频 | 日韩欧美在线一区 | 成人免费在线视频 | 久久伊人久久 | 日本一区二区三区四区 | 欧美一级淫片免费视频黄 | www.成人在线视频 | 欧美久久精品一级c片 | 日韩国产精品一区二区三区 | 日韩一区在线观看视频 | 精品福利av导航 | 久久精品一区二区三区四区毛片 | 亚洲精品色| 精品视频一区二区三区 | 日韩在线视频一区 | 在线观看国产 | 黄色免费在线观看网址 | 免费av片在线 | 欧美二区三区 | 日韩久久一区二区 | 91网在线观看 | 欧美久久综合 | 久久成人国产 | 国产一区免费视频 | 太平公主一级艳史播放高清 | 国产福利91精品 | 国产色区 | 成人免费视频网址 | 日韩欧美在线综合 | 黑人粗黑大躁护士 | 亚洲网站在线观看 | 天天插天天操 | 欧美综合视频在线观看 | 九九九色 | 国产伦精品一区二区 | 青青草av | 午夜爽爽影院 | 久久久影院 | 操一草 | 欧美一区二区免费 | 在线一区二区三区 | 亚洲午夜在线 | 欧美一区第一页 | 国产精品白浆 | 亚洲国产精品99久久久久久久久 | 久久久久久亚洲精品 | 在线观看中文字幕亚洲 | 国产欧美一区二区 | 人人爱超碰 | 国产性色av | 国产视频一区二区 | 曰韩中文字幕 | 北条麻妃一区二区三区在线 | av第一页| 久久久久久久久久久久久av | 国产婷婷精品av在线 | 欧美日韩综合视频 | 欧美黑人xx | www.久久精品 | 成人欧美一区二区三区在线播放 | 欧美一级二级三级视频 | 羞羞视频在线观看入口 | 一区二区在线视频 | 亚洲欧美日韩国产综合 | 亚洲成人精品影视 | 久久国产精品免费一区二区三区 | 在线不卡一区 | 久久人人爽人人爽人人片亚洲 | 夜夜爽99久久国产综合精品女不卡 | 久久免费国产 | 亚洲视频在线免费观看 | 久久免费小视频 | 欧美高清一区 | 成人精品国产一区二区4080 | 日本一区二区三区免费观看 | 亚洲精品麻豆 | 日韩精品在线观看视频 | 国产成人精品一区一区一区 | 久久久久久久久久久久网站 | 九九精品视频在线观看 | 亚洲精品一区二区三区四区高清 | 一区二区三区四区在线播放 | 中文字幕在线第二页 | 欧美日韩激情在线一区二区三区 | 日韩欧美中文字幕在线视频 | 97国产精品视频人人做人人爱 | 男女羞羞视频免费观看 | 黄色国产视频 | 国产精品亚洲综合 | 亚洲福利国产 | 日本在线看 | 国产精品久久精品 | 欧美在线小视频 | 欧美男人的天堂 | 国产成人精品一区二区在线 | 欧美黄色一区 | 日韩一级在线免费观看 | 欧美夜夜骑 | 大象视频成人在线观看 | 日韩欧美在线一区二区 | 久久精品国产亚洲 | 日本一区二区高清不卡 | av大片在线| 成年无码av片在线 | 亚洲国产精品一区二区三区 | 欧美国产日韩在线 | 91精品一区| 三级在线观看 | 色久视频 | 噜噜噜噜狠狠狠7777视频 | 中文字幕一区二区三区乱码图片 | 国产精品视频一二三区 | 日韩国产欧美视频 | av片网站| 日本久久精品视频 | 青青久久 | 超碰在线91 | 亚洲视频中文字幕 | 得得啪在线视频 | 中文字幕亚洲欧美日韩在线不卡 | 日韩欧美一级二级 | 久热中文字幕 | 国产综合精品一区二区三区 | 亚洲日本欧美日韩高观看 | 福利精品在线观看 | 999精品在线 | 成人男女激情免费视频 | 一区二区三区视频播放 | 日韩www | 成人欧美日韩一区二区三区 | 欧美视频免费在线 | 四色成人av永久网址 | 亚洲免费综合 | 免费视频成人 | 午夜a级理论片915影院 | 欧美成人h版在线观看 | 久久国产一区二区 | 欧美日韩中文字幕在线 | 国产成人午夜精品影院游乐网 | 日本福利在线观看 | 久久久久国产一级毛片高清版小说 | 国产人体视频 | 国产乱肥老妇国产一区二 | 国产一级网站 | 欧美国产日韩一区 | 亚洲艹 | 国产午夜精品视频 | 国产高清视频一区二区 | 成人在线观看免费视频 | 国产婷婷在线观看 | 韩日在线观看视频 | 欧亚视频在线观看 | 久久精品伊人 | 蜜臀久久99精品久久久无需会员 | 国产亚洲精品美女久久久久久久久久 | 国产欧美在线视频 | 亚洲一区二区三区四区在线观看 | 国产女人高潮视频在线观看 | 一区二区三区国产 | 日韩久久在线 | 午夜影院免费 | 成人毛片久久 | 狠狠艹av| 久久99精品久久久久久园产越南 | 欧美国产视频 | 在线观看免费av电影 | 国产成人精品一区二区三区视频 | 国产av毛片 | 亚州精品天堂中文字幕 | 成人免费毛片高清视频 | 色天天综合久久久久综合片 | 香蕉成人啪国产精品视频综合网 | 99久久精品一区二区成人 | 亚洲毛片 | 国产视频色 | 欧美8一10sex性hd| 欧美日韩亚洲一区二区 | 久久精品美女 | 国产精品久久九九 | 亚洲色图88| 日日做夜夜爱 | 日韩精品中文字幕在线播放 | 狠狠干欧美 | 久久蜜桃精品一区二区三区综合网 | 亚洲不卡视频 | 99精品视频在线 | 亚洲国产精品久久久 | 色网在线看 | 久日精品| 亚洲视频在线看 | 欧美一区二区三区免费 | 国产日韩欧美高清 | 午夜无码国产理论在线 | 精品久久久久久国产 | 天天操天天干天天 | 日韩一级在线免费观看 | 日韩欧美国产精品一区二区三区 | 国产精品视频一区二区三区四蜜臂 | 成人在线视频一区 | 97精品国产97久久久久久粉红 | 日韩一区电影 | 亚洲aaaaaa特级| 久久美女视频 | 日韩在线国产 | 一 级 黄 色 片免费网站 | 精品久久久久久亚洲精品 | 91精品国产日韩91久久久久久 | 伊人yinren22综合开心 | 国产成人免费在线观看 | 爱操av| 一区二区三区视频播放 | 国产精品国产精品国产专区不片 | 99精品一区二区三区 | 天天操天天碰 | 欧美簧片在线 | 成人一区视频 | 97精品国产97久久久久久粉红 | 日韩精品一区二区三区老鸭窝 | 欧美久久大片 | 观看av | 国产在线资源 | 亚洲成人福利 | 91精彩视频在线观看 | 亚洲一区二区三区四区五区中文 | 亚洲第一视频 | 精品亚洲网 | 女同久久 | 一区二区三区在线免费 | 国产欧美精品一区二区三区 | 色综合激情 | 欧美日韩在线一区二区 | 成年人av网站 | 久久99这里只有精品 | 中文字幕国产 | 久久精品久久综合 | 在线免费观看一区 | 国产视频第一区 | 在线观看国产精品一区 | 亚洲激情在线播放 | 奇米色欧美一区二区三区 | 午夜免费福利视频 | 日韩成人av在线 | 99亚洲精品| 综合久久网 | 在线日韩欧美 | 亚洲热av| 日韩毛片在线观看 | 黄色片地址 | 国产成人精品一区二区三区四区 | 国产亚洲一区二区精品 | 欧美中文在线 | 国产片一区二区三区 | 精品国产一区二区在线 | 亚洲精选免费视频 | 欧美综合激情 | 毛片在线视频 | 久久精品2 | 日日久| 福利网址| 成人三级在线 | 在线小视频| 久久国产一区二区三区 | 亚洲精品一区二区 | 欧美日韩精品网站 | 精品在线| 国产激情网站 | 欧美成人h版在线观看 | 午夜一区二区三区在线观看 | 91久久艹 | 国产伦精品一区二区三区四区视频 | 欧美精品在线一区二区三区 | 亚洲人在线播放 | 久久亚洲一区 | 亚洲精品成人av | 国产一区av在线 | 亚洲在线电影 | 免费的黄色网 | 欧美视频一区二区三区在线观看 | 91大片| 福利网在线 | 久久中文字幕一区 | 日日久| 日韩视频一区二区 | 国产麻豆一区二区三区 | 欧美啪 | 午夜视频网| 一区二区在线播放视频 | 日韩成人| 久久久涩 | 美国一级毛片a | 欧美黑人xxx | 欧美日韩国产一区二区三区 | 久久99国产一区二区三区 | 天天草天天干 | 成人免费视频网站 | 97超碰站 | 亚洲一区视频在线 |