Objective C (iOS) for Qt C++ Developers(iOS開發,Qt開發人員需要瞭解什嗎?)

來源:互聯網
上載者:User

標籤:

                                                                                                       Qt/C++開發人員眼中的Obj-C
     對於我們第一次自己定義iOS應用來說,對於來自Qt/C++開發人員來說,我不得不學習Objective-C相關文法與知識
為了讓讀者可以更easy理解這篇部落格的內容,我將描寫敘述諸多我所學到的東西.這將很多其它的是大腦轉存而不是單一的教程
,所以我仍然希望這將對你非常有協助,我將首先寫程式設計語言的差異,然後再寫關於類庫的差異
    1.Objective C vs C vs C++
    類似於C++,Obj-c是C語言的一個超集(這不是100%正確的,可是一個足夠好的語句來理解它),您將使用的副檔名的頭.h和.m來表示Obj-C文法
 注意還有obj- c++副檔名.mm,儘管我如今還不會寫.
    類似於塞班c++,Obj-C是使用兩個階段進行構造:首先你在堆上指派至,然後調用init方法.
通常能夠避免調用兩個方法和僅僅使用一個靜態簡便的方法,直接給你一個新分配的對象(比如stringWithCString).
    全然不同(起初很分散)是Obj-C函數的調用方法,類似通常的C-ish方式,比如NSLog(@“我的日誌訊息”);但也有Obj-C文法對象的調用方法。
作為一個範例,這是對象有一個方法包括兩個參數:obj(obj methodName:param1value param2:param2Value]。看起來非常奇怪甚至彆扭,但你要去適應它。
 在Objective C,這是通常被稱為發送訊息,不不過它的調用方法,還有好多我發現更加混亂.
    在上面這種方法示範範例,methodName是所謂的選取器。一個選取器是一個方法的標識符。有時你必須識別方法(類似於一個函數指標),
 在上面的範例中你能夠這樣寫@selector(methodName:param2:).
    在c++中沒有根對象和Qt QObject僅用於一些對象,Objective C有強制性的根對象NSObject .
 相反Qt你想訊號/插槽,你僅僅用QObject類,而Obj-c這裡你用NSObject做不論什麼事情.
    自從iOS 5 實現ARC(自己主動引用計數),覺得它像一個隱式QSharedPointer在你的對象。編碼過程感覺到你有一個垃圾收集器。在內部,ARC告訴編譯器插入保留(添加引用計數)和釋放(減量引用計數和終於銷毀)語句在您的代碼中。
 我覺得這是非常棒的,假設你堅持正常的做事的方式你基本上能夠不再再操心記憶體流失.
     Objective C屬性類似於Qt中的Q_PROPERTY,這意味著您能夠使用好obj.var = foo文法在代碼內部(obj setVar:foo)訊息稱為(好吧. .訊息發送)。您能夠建立一個屬性@property和編譯器使用@synthesize為你做一個getter / setter。
 當然也能夠定製getter / setter實現很多其它的內部邏輯,比如實現延遲初始化。
    你能想象Objective C託付作為一組插槽。託付對象的一個託付方法被對象調用通知某些事情已經發生。這很類似於Java的介面
    2.與Qt相關類相類似的東西
    與文法一樣重要是相關的庫所提供的iOS(和OS X)。請繼續閱讀,瞭解他們提供的對象和功能。
    NSString對象是一個常量字串。您還能夠建立通過@“followed by me”。

有一個可變的字串,必須使用NSMutableString配合其appendString,appendFormat等功能。尤其是appendFormat真的非常實用。


假設你想做替換,stringByReplacingOccurrencesOfString是你的朋友,給你一個新的NSString對象。若是構建檔案系統的路徑,您能夠使用stringByAppendingPathComponent。


    像在c++中,基本類型像int不是對象。假設你須要封裝在一個對象,您能夠使用NSNumber和NSValue ,QVariant(類似)。

據我所知:您能夠使用intValue NSNumber或者NSString方法等轉換為int類型。


    NSArray、NSSet NSDictionary他們聽起來像:一個容器來儲存NSObjects。NSArray相當於QList,NSSet等於 QSet,還有NSDictionary 類似於QHash / QMap。
您須要使用他們可變泛型改變他們(比如NSMutableArray)。

假設你想儲存原始類型,您須要使用NSNumber、NSValue等封裝。對於NSArray,您能夠通過使用objectAtIndex訪問對象。
NSDictionary,你使用valueForKey或objectForKey。
   我沒有做太多的關於檔案IO方面的,所以我不能過多的寫。有NSFileManager檔案夾操作。你能夠非常easy地讀(小)檔案通過NSString stringWithContentsOfFile或NSData dataWithContentsOfFile。
記得在OS X和iOS系統都是基於POSIX標準,因此你也能夠使用系統的方法得到原始效能或者效率更高。
    談到NSData:這是相當於Qt中QByteArray,可變的泛型,能夠看看NSMutableData。

你能夠通過資料或訪問mutableData方法得到char *指標。
    我認為如今的大多數行動裝置 App程式使用HTTP。在Qt您將使用QNetworkAccessManager。在Objective C,你使用一個NSMutableURLRequest NSURLConnection內(或NSURLRequest)。您須要設定NSURLConnection託付。
託付處理非同步事件時產生下載(readyRead訊號串連:didReceiveData:完畢訊號connectionDidFinishLoading:等)。


    假設你想做基於通訊端的IO,我僅僅能推薦GCDAsyncSocket。我曾經嘗試通訊端編程iQuassel項目有幾個原因,主要由於你必須使用Carbon取代Cocoa。GCDAsyncSocket也有不錯的優勢,您能夠非常easy地在一個線程中進行網路通訊協定解析,避免堵塞UI線程。
    談到線程:你能夠通過使用NSObject 的performSelectorInBackground實現主要的並發性。它使一個方法在後台線程中執行。它能夠通過performSelectorOnMainThread傳達其結果到主線程。

假設你想做一個Qt-tish 0計時器調用,檢查afterDelay: performSelector變異,選取器執行在一個事件迴圈調用。


 很多其它進階先進的東西能夠用NSOperationQueue或中央CPU調度。
     NSRunLoop相當於Qt中的QEventLoop 。

假設你在還有一個線程處理事情和須要一個事件迴圈,比如網路IO。

那您能夠使用它來處理。
     NSUserDefaults是一個非常好的方式來儲存和載入應用程式設定(與QSettings相類似)。
     不幸的是Obj-c沒有類似于于QtXmlPatterns的相關對象。libxml2存在在iOS裝置上,因此您能夠使用。

對於簡單的sax風格的解析,至少有NSXMLParser能夠對付。


     3.UI Things
     XCode有視覺設計師(包括介面構建器),設計師能夠設計一個故事板(UIStoryboard)包括大量的視圖控制器(UIViewController子類)。

每一個視圖控制器管理檢視(還記得MVC嗎?)。導航視圖之間通過演變(UIStoryboardSegue)發生。


您能夠通過源視圖控制器的prepareForSegue方法在視圖控制器之間移動資料。在得到由OS特定事件發生時調用每一個視圖控制器類似viewWillAppear等方法。
     您使用“outlets”連結與他們的同一在介面構建器UI檔案裡控制項的執行個體(比如UIButton、UILabel),用CTRL按鍵組合進行拖拽.
     Qt的諸多視圖和控制項,我不做太多與之相應的Obj—C方面的控制項的比較。這裡就看看UITableView的內容包含使用你的UITableViewDataSource 和UITableViewDelegate。

我想說的差點兒全部的iOS應用程式都會使用表視圖。
     假設你已經使用過QWebView,換成UIWebView也是一樣.
     QImage和QPixmap 等同於CGDataProviderRef,NSImage和CGImage.
     你能夠使用核心圖形的方法自己定義畫圖。UIGraphicsBeginImageContextWithOptions建立一個上下文,您能夠使用畫圖功能。假設你想獲得位元影像的上下文,嘗試UIGraphicsGetImageFromCurrentImageContext。
     QRect,QPoint是CGRect等價物,CGPoint CGSize。

有助於你調試,檢查NSStringFromCGRect和它的朋友們。
     對於小組件,注意NS * UI類相應於OS X和UI *類相應於iOS.
     4. Misc
     當我開發Qt,我使用QtCreator,我的聯合創始人奧利弗是KDevelop的粉絲,他也應該非常喜歡QtCreator,對於iOS開發,您能夠使用蘋果免費的XCode開發工具。


     蘋果的project師還為您提供一些單元測試類似於Qt的QTest。在XCode,建立一個新的測試類和用法比如:STAssertEquals STAssertTrue等等.
     5.Want to know more?


     我猜想 Qt的開發人員論壇網站(http://qt-project.org/forums/)就相當於StackOverflow,iOS編程大多數問題在StackOverflow都能夠找到答案和協助。另一個內部蘋果開發人員論壇(https://idmsa.apple.com/IDMSWebAuth/login?appIdKey=4a75046cda87eab6386a9eae8caabb9824e328b9abc988119b39296495ec184c&path=/login.jspa)。


     當然,假設你Qt應用到iOS不管需要協助 . 這是Woboq你可以做一件事!麻煩給我們寫信.

Objective C (iOS) for Qt C++ Developers(iOS開發,Qt開發人員需要瞭解什嗎?)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.