教你编写 Mac OS X 的 Hello World 程序

  2013-04-29 00:00:00 CST

  Jingwen Peng

  Mac Objective-C Xcode

ScreenShot

编写原生的 Mac 和 iOS 程序需要用到的编程语言是 Objective-C,它是一种高级的面向对象的编程语言。和 C++ 一样,是 C 的超集,即面向对象的 C。Objective-C 诞生于上世纪 90 年代,后被 NeXT (老乔被逐出苹果后创办的企业) 选作开发 NeXTStep 系统的主要语言,继而 NeXT 又开发出了 Foundation Kit 和 AppKit 作为 NeXTStep 系统的接口和用户界面。1996 年,苹果并购 NeXT 后,NeXTStep 操作系统演化成了 OS X。现在,开发 Mac OS X 的软件用到的库是 Cocoa,iOS 用到的库是 Cocoa Touch,使用的开发工具为苹果公司免费提供的 Xcode。

下面开始教你编写 Hello World

运行 Xcode,Create a new Xcode project (新建 Xcode 工程)。 接下来选择 Cocoa Application (Cocoa 应用程序,就是 Mac OS X 的应用程序)。 然后选择 Use Automatic Preference Counting (使用自动引用计数,可以节省很多的内存管理工作),填写 Product Name (工程名)。 选择保存位置后,一个新的空项目就建立完毕了。

ScreenShot

在 Xcode 的左侧可以看到工程文件组织形式。Mac 和 iOS 的开发遵循 MVC 的软件设计模式,Model、View、Controller 分离。Hello World 程序完全是 View 和 Controller 的工作,这里我们不使用 Model。MainMenu.xib 是保存用户界面信息的文件,即 View;AppDelegate 是整个程序的代理,我将直接使用它作为 Controller。

接下来设计窗体

ScreenShot

从 Xcode 右下角的 Object Library 直接拉出空间放到窗体上,文字区域用 NSTextField,按钮是 NSButton。然后在右上角的 Inspector 修改空间的属性,删除 NSTextField 中的文字,更改 NSButton 的标题。

View 设计完毕,然后实现 Controller, Controller 使用 AppDelegate,是一个类,我们不需要将它和 View 的交互定义成为公共接口。所以直接在 AppDelegate.m 中实现我们要做的就够了。 首先声明一个指向 View 中的 NSTextField 的弱指针 (指针在 Objective-C 也要分强弱的,说来话长),并将其与 View 连接。

ScreenShot

当按下按钮时,相当于对 Controller 发送了一个 Action,送出了一个消息。接下来实现当按下按钮时程序作出的相应。按下按钮时,修改 NSTextField 中的文本值为 “Hello World”。

ScreenShot

AppDelegate 代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//  AppDelegate.m
//  HelloWorld
//
//  Created by PJW on 2013-4-29.
//  Copyright (c) 2013 PJW. All rights reserved.
//
#import "AppDelegate.h"

@interface AppDelegate()
@property (weak) IBOutlet NSTextField *text;
@end

@implementation AppDelegate
@synthesize text = _text;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
    // Insert code here to initialize your application
}

- (IBAction)say:(NSButton *)sender {
    [[self text] setStringValue:@"Hello World"];
}
@end

ScreenShot

至此,Hello World 程序已经完成。

学写代码,Hello World 程序是必不可少的,是通向光明的必经之路。

如果您有疑问或建议,请在下方评论区域留言

遵循 BY-NC-ND 协议

评论功能加载中...