iOS编程基础: Hello World App是如何运作的?

移动开发 iOS
我希望你享受了第一个iOS编程教程,同时已经创造了你的第一个App。在进入下一教程以及制作一个更复杂的App之前,我们有必要回过头,分析这个Hello World App。对于你理解一些Objective-C语言的语法和App的内部工作机制有很大帮助。

译者注:

1. 由于这是技术文章,所以有些词句使用原文,表达更准确。

2. 由于水平有效,有些地方可能翻译的不够准确,如有不当之处,敬请批评指正。

我希望你享受了第一个iOS编程教程,同时已经创造了你的第一个App。在进入下一教程以及制作一个更复杂的App之前,我们有必要回过头,分析这个Hello World App。对于你理解一些Objective-C语言的语法和App的内部工作机制有很大帮助。

目前为止,想必你已经按照教程完成了你的第一个Hello World App。不过,当你完成了这个教程之后,你脑海里肯定冒出了更多疑问:

  • xib,.h,.m文件是做什么用的?
  • 在showMessage内部的代码是什么?用什么作用?
  • 当你按下Hello World的按钮发生了什么呢?按钮是如何触发了显示消息的动作呢?
  • Xcode中的Run按钮是如何运作的?

我希望你已经对Xcode IDE开发环境比较熟悉了,这样我就不用再解释一遍上面的内容了。对于每个开发者来说,理解代码的内部细节和抓住基本概念对于iOS编程是很有必要的。对 于某些技术概念,如果你没有丝毫的编程背景来说,理解一些技术概念是有一定难度的。但是,别担心,这里仅仅是一个开始。如果你继续学习后续的教程,写出更 多的代码,你就能更好的理解iOS编程。尽你所能努力学习更多知识吧!

Interface Builder, Header and Implementation Files

首先,.xib, .h, .m文件是什么呢?这是一位读者提出的一个非常好的问题。在项目导航中,你应该可以找到3种主要的文件类型:.xib, .h, .m。(如果你打开“Supporting Files”文件夹,你可以找到其他的文件类型,例如plist和framework。但到目前为此,我们先忘掉它们,在今后课程中我们会讨论它们。)

.xib

  • 如果一个文件也有.xib的扩展名,它们是Interface Builder文件,存储了应用的UI。当你点击了.xib文件,Xcode会自动的打开Interface Builder界面,你可以通过拖动和放下来编辑应用的UI。如下图所示:

Interface Builder in Xcode

Interface Builder in Xcode

.h and .m

  • .h扩展名的文件表示这是头文件,.m扩展名表示是具体的实现。和其他大多数编程语言一样,Objective-C的源码也分为2部分:接口和实现。

为了便于你更好的理解这2者关系,我们拿电视遥控器打比方。我们可以很方便地使用无线遥控器调节电视的音量。你按下音量+按钮增大扬声器的音量。切 换频道时,你只需要按下频道数字。那我来问问你,你知道当你按下音量按钮的背后发生了什么吗?估计你不知道吧。我相信大部分人都不知道遥控器和扬声器之间 是如何通信的。我们仅仅知道的是,那个按钮是用来调节音量的。在这里,按钮就是接口,而按钮之后的具体细节我们称之为实现。

现在你应该对接口和实现有了一个更深的理解。让我们回到代码,在Objective-C语言中,一个类的接口是放在.h文件中。我们使用语法标示符@interface来声明一个类的接口。看下HelloWorldViewController.h的具体实现:

  1. @interface HelloWorldViewController : UIViewController 
  2.  
  3. -(IBAction)showMessage; 
  4.  
  5. @end 

HelloWorldViewController这个类名以“@interface”开头。内部则声明了一个“showMessage”的实现,也可以称之为方法。

就像音量按钮,显然我们不知道showMessage这个方法是如何运作的。你仅仅知道它是用于在屏幕上显示一条信息。具体的实现则放在HelloWorldViewController.m文件中,如下所示:

  1. @implementation HelloWorldViewController 
  2.  
  3. // I've removed other methods for better reading. Focus on the showMessage method first. 
  4.  
  5. - (IBAction)showMessage  
  6.     UIAlertView *helloWorldAlert = [[UIAlertView alloc] 
  7.                                 initWithTitle:@"My First App" message:@"Hello, World!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
  8.  
  9.     // Display the Hello World Message 
  10.     [helloWorldAlert show]; 
  11.  
  12. @end 

正如你上面所示,你使用“@implementation”去声明一个实现。在“showMessage”中,代码用于定义在屏幕中弹出一条警告。 你不需要弄明白在“showMessage”的方法中每一行代码具体含义。简单来说,创建了一个以“My First App” 为标题,“Hello, World”作为消息的UIAlertView。然后调用“show”方法去请求iOS用于在屏幕上显示一个弹出消息。如下图所示:

Hello World App

Hello World App

想必你已经弄明白了接口和实现吧?

Behind the Touch and Tap

当你按下 “Hello World”按钮实际上发生了什么? “Hello World” 按钮是如何调用 “showMessage” 方法去显示“Hello World”的消息呢?

回想起你是如何在Interface Builder建立起“Hello World”按钮和“sendMessage”的具体动作的关联的。再次打开“HelloWorldViewController.xib” ,选择“Hello World” 按钮,在Utility区域点击“Sent Events”按钮打开发生事件。

Hello World Button Send Events

发送部分展示了所有的关于事件和动作的联系。例如上述图片所示,“Touch Up Inside” 事件就关联到 “showMessage”的动作。在iOS中,app是事件驱动的。控制/目标监听特定的动作,例如触摸和按下。当事件触发之后,目标就会调用预设的关 联到事件的动作。

在我们的Hello World App中,当用户在按钮上抬起手指, “Touch Up Inside”的事件就触发了。结果,它会调用“showMessage”的动作去显示 “Hello World” 的消息。

下图很直观的展示了刚才所描述的事件流:

Event and Message Flow of Hello World App

Event and Message Flow of Hello World App

Behind the Scene of the “Run” Button

当你点击“Run” 按钮,Xcode就会载入模拟器,运行你的App。但是在这个场景之后,发生了什么?作为一名程序员,你需要了解它的整个流程。

Event and Message Flow of Hello World App

整个流程可以分为3部分:编译、打包和运行

编译

  • 你可能会认为iOS可以读懂Objective-C代码。大错特错,实际上,iOS只能读懂机器码。Objective-C代码只是便于程序员去 读和写代码。我们需要将Objective-C源码翻译成机器码,这样iOS才可以读懂你的App的源码。这个过程就称之为编程。Xcode已经自带了编 译器用于编译源码。

打包

  • 不同于其他源码,一个App通常包含大量的资源文件,比如图片,文本,xlib文件等等。所有的这些资源都必须要打包进最终的App中。

我们通过把上述2个过程称之为build

Xcode-Build-Option

Run

  • 按下之后,启动模拟器,载入你的App.

翻译 By Long Luo

原文链接:iOS Programming Basic: How Does the Hello World App Work?

责任编辑:闫佳明 来源: longluo.github.io
相关推荐

2017-11-28 16:57:18

2012-08-27 09:10:05

JVMJava

2009-08-11 10:32:23

什么是Groovy

2011-03-14 09:33:35

Mono

2011-03-21 09:45:52

Hello WorldObjective-C生命周期

2021-02-15 15:36:04

采矿加密货币区块链

2021-12-17 22:52:44

物联网电信技术

2021-03-30 13:48:47

WebAssemblyWeb浏览器编程语言

2023-12-21 15:37:31

编程语言FortranC语言

2014-12-19 10:07:10

C

2017-11-23 17:45:46

Yii框架IntelYii框架深度剖析

2014-11-10 09:29:13

Google

2024-09-29 08:49:49

2022-06-07 14:30:40

区块链比特币以太坊

2011-07-27 15:39:15

IOS IOS开发

2020-02-12 15:08:41

KVM内部运作

2009-09-16 17:15:19

OSGi Bundle

2023-01-06 08:18:44

2009-07-30 13:21:17

Scala入门Hello World

2011-06-08 14:39:06

Qt 教程
点赞
收藏

51CTO技术栈公众号