今天是第一次用Xcode,什么都不會,對於像我這種從windows c++轉mac c++/obj-c/python的人,對mac下的編程可以說是一點都不了解,這篇文章也從零開始寫起,記錄我的cocoa編程學習歷程。
1、mac下怎么編程
由於對Xcode極其陌生,大學時學java弄過eclipse,然后又了解到中文版的跨平台IDE Netbeans,所以就裝了這兩款IDE的mac版。剛裝上的時候無從下手,因為我知道編寫程序都是要include某些庫的,可是庫在哪兒呢?
上網查到eclipse和Netbeans要編寫python和C++都需要安裝插件,插件安裝選項都在Help菜單里,找到相應的c++和python工具,都裝上,就至少在新建項目時可以建立相應的工程了。不過python還好,C++可是怎么都運行不起來。查了老半天資料,發現這兩款IDE都沒有自帶C++的編譯器,於是安裝了Xcode,此時Netbeans已經可以運行C++了,eclipse卻仍然不行。
一番研究之后,發現eclipse新建C++工程得選Mac OS gcc,工程設置里的C++ builder setting也得選GCC C++ compiler,binary選Mach-O 64 Parser,這樣應該就OK了(具體原理還不知道)。可見eclipse配置起來還是很麻煩的,不過我接觸過的程序員都說eclipse比netbeans好……
說了這么半天C++和python,還都是集中在控制台程序,我很久以前寫過VB和C#的GUI程序,但是C++、python的GUI我可從來沒寫過,何況在mac下,沒有VS,我根本不知道怎么做GUI呢!又上網查,跨平台GUI庫首推Qt和wxWidgets,好吧,不會用,而且這倆也都沒有自帶界面編輯器。正好在機緣巧合的機會下,我可能得需要開發mac原生程序,那么不如看看Xcode是怎么做mac程序的GUI的吧。
所以今天的目標是,做出一個mac下的GUI程序來。
至於Xcode,裝了之后不需要做什么設置就能用了,如果是編寫Objective-C應用,那么生成出來的就是app程序,可以直接在mac上面用了。這便是mac下如何編程的最簡潔的答案。
2、Xcode怎么做GUI
Xcode自帶了GUI編輯器IB,用起來還是挺方便的,不過跟VS最大的區別在於,VS是雙擊控件就進入到事件代碼編寫,而Xcode選擇了某種稱為“Action”和“Outlet”的鏈接機制,具體是怎么回事也還沒有深究,簡單來講,Action用於觸發事件,而Outlet是指針,指向某一控件,用於調用控件的功能,我知道的就這么多。
今天要寫的程序需要有一個窗體,其中有一個按鈕,按下按鈕可以在窗體中空白處顯示一行字。以下是流程:
(1)新建Objective-C Application工程,取名,選路徑
(2)菜單View-Assistant Editor打開輔助編輯器,其實就是分屏
(3)第一屏頂欄選擇MainMenu.xib打開界面編輯器,雙擊左側樹形圖中的Windows-View,新建窗體,從右側下部控件列表中把Button和Label拖入窗體
(4)第二屏選擇工程名文件夾下的.h文件,鼠標點選按鈕控件,按住CTRL鍵拖至.h文件中,建立IBAction。標簽空間拖入建立IBOutlet。
(5)第二屏選擇工程名文件夾下的.m文件,在文件頭添加@synthesize IBOutlet名,IBAction函數中寫上[IBOutlet名 setStringValue:@"要顯示的字符串"]; ,記住中括號、@和結尾的分號不能少。
(5)點擊運行應該就可以看到效果了。
完整代碼如下:
// // AppDelegate.h // helloworld // // Created by me on 14-6-25. // Copyright (c) 2014年 me. All rights reserved. // #import <Cocoa/Cocoa.h> @interface AppDelegate : NSObject <NSApplicationDelegate> @property (weak) IBOutlet NSTextField *text; @property (assign) IBOutlet NSWindow *window; - (IBAction)click:(id)sender; @end
// // AppDelegate.m // helloworld // // Created by me on 14-6-25. // Copyright (c) 2014年 me. All rights reserved. // #import "AppDelegate.h" @implementation AppDelegate @synthesize text; - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Insert code here to initialize your application } - (IBAction)click:(id)sender { [text setStringValue:@"Hello World!"]; } @end
3、總結
Objective-C中的.m文件就相當於C++中的.cpp文件,是用於實現函數功能的。
Xcode的代碼自動提示功能很好用,可以迅速熟悉OC的類庫。