今天是第一次用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
@interface AppDelegate : NSObject
@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的类库。