zoukankan      html  css  js  c++  java
  • iOS编程教程(三):HelloWorld应用程序如何工作?

    我希望你很享受iOS编程的教程并已经构建你的第一个应用程序。在我们继续我们的下一个建立一个更复杂应用程序的教程之前,让我们退后一步,仔细看看先前建立的Hello World应用程序。这将是一个让你了解一些Objective-C的语法和应用程序的内部运作的好方法。

    到目前为止,您按照一步一步的指导并构建Hello World应用程序。但当你继续本教程的话,您可能会遇到这些问题:

    ·         那些 .xib, .h .m 文件是什么? 

    ·         ”showMessage”里的”urgy”是什么?他们有什么用?                                                                                            

    ·         究竟在你点击”HelloWorld”按钮后发生了什么?按钮怎么触发”showMessage”事件的?

    ·         “Run”按钮是怎么在Xcode里工作的?

    我希望您能够专注于探索Xcode环境,所以我没有在以前的帖子解释任何上述情况。然而,这是必不可少的对于每一个开发人员,理解系统内部代码背后的细节和把握iOS编程的基本概念。对于一些技术概念,他们可能会有点难以了解,特别是如果你没有编程背景。但是,不要担心。这仅仅是一个开始。在以后的教程中,当你深入阅读并写更多的代码,您将更好地了解iOS编程。只要你努力坚持下去就行。

    Interface Builder(界面生成器),Header(头文件)和Implementation Files(实现文件)

    首先,这些.xib, .h .m 文件是什么?这是一个读者提出的非常好的问题之一。在项目浏览器中,你应该找到三种主要类型的文件 -  .xib, .h .m.。(如果展开“Supporting Files”文件夹中,你会发现其他类型的文件,如plistframework。但现在,让我们先忽略他们。稍后我们将谈论他们。)

    .xib -文件扩展名为.xib,在Interface Builder(界面生成器)中的文件存储在应用程序的用户界面(UI)。当你点击.xib文件时,Xcode会自动切换到界面生成器,您可以通过拖动和拖放来编辑应用程序UI

    Hello World Interface Builder

    在Xcode界面生成器

    .h and .m- .h扩展名的文件是头文件,.m扩展名的文件是实现文件。像大多数的编程语言,Objective-C的源代码分为两部分:interface and implementation

    好了,把打个比方说,你可以更好地理解这两个词,让我们考虑电视机的遥控器。遥控器可以通过远程无线方便的控制电视音量。为了提高扬声器的音量,按下“音量+”按钮。要切换频道,你只需输入频道号码。那我问你。你知道当按下“音量”按钮幕后会发生什么?很可能不会。我相信我们大多数人不知道如何用电视机的遥控器与电视剧进行通信和控制扬声器的音量。我们只知道的是,该按钮用于改变音量。在这个例子中,和你交互的按钮就是“interface”(界面)了,按钮背后隐藏的内部细节就是”implementation”(实现)。

    现在,你应该对界面和实现有一个更好理解。让我们回到代码。在Objective-C中,一个类的界面组织在 “.h”的文件。我们使用“interface”的语法来声明一个类的界面。在HelloWorldViewController.h一看,这是头文件:

    1
    2
    3
    4
    5
    @interface HelloWorldViewController : UIViewController

    -(IBAction)showMessage;

    @end

    HelloWorldViewController”@interface”开始,这是类名。在内部,它宣告了一个“'showMessage”的行为,这被称为一个方法调用。

    音量按钮,显然我们不知道” showMessage”如何工作。你只知道它是用来在屏幕上显示一条消息。实际的实现是在HelloWorldViewController.m里,实现文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @implementation HelloWorldViewController

    // I've removed other methods for better reading. Focus on the showMessage method first.

    - (IBAction)showMessage 
    {
        UIAlertView *helloWorldAlert = [[UIAlertView alloc]
                                        initWithTitle:@"My First App" message:@"Hello, World!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        
        // Display the Hello World Message
        [helloWorldAlert show];
    }

    @end

    正如你在上面看到的,您可以使用声明关键字“@implementation”来声明实现。里面的“'showMessage”,它的实际义代码意思是在屏幕上显示警报消息。你可能不理解“'showMessage”方法里面的每一行代码。简单地说,它创造了一个标题为“My First App”和消息为“Hello World”UIAlertView。然后,它调用了“show”的方法并要求在iOS屏幕上显示弹出消息。

    Hello World App

    Hello World 应用程序

    明白界面(interface)和实现(implementation)的概念是至关重要的。如果您有任何问题,请在我们的论坛随时提出你的问题。

    点击背后

    点击“Hello World”按钮后,究竟发生了什么?“Hello World”按钮怎样调用“'showMessage”的方法来显示“Hello World”消息?

    回想你曾经在”Interface Builder” 建立 “Hello World”按钮和“SendMessage”函数的连接。请尝试重新打开 “HelloWorldViewController.xib”并选择“Hello World”按钮。在实用区域点击“Sent Events”按钮,来打开发送事件。

    Hello World Button Sent Events

    “Sent Events”(发送事件)显示事件和动作之间的所有连接。正如你可以看到在上面的图中,“Touch Up Inside”的事件已连接到“'showMessage”行为。在iOS系统中,应用程序是事件驱动的。control/object(控制/对象)(例如UIButton的)监听特定的事件(如touches(触击)tap(点击))。当事件被触发时,对象调用与事件相关联的预设操作。

    在我们的Hello World应用程序,当用户抬起手指接触里面的按钮,“Touch Up Inside”事件被触发。因此,它调用了“' showMessage”的行动,来显示“Hello World”消息。

    下面的插图总结了我刚才所描述的事件流。

    HelloWorld Message and Event Flow

    Hello World应用程序的事件和消息流

    幕后的Run(运行)按钮

    当您单击“Run(运行)按钮,Xcode自动启动模拟器,并运行您的应用程序。但是,会发生什么幕后?作为一个程序员,你要研究的整个过程。

    Xcode Build Process

    整个过程可分为三个阶段:编译,打包和运行。

    编译 -你可能认为iOS理解Objective-C代码。在现实中,IOS只读机器代码。Objective-C的代码只是给你--程序员编写和阅读。为了让iOS的理解应用程序的源代码,我们必须要经过一个翻译过程中,把Objective-C代码翻译成机器代码。这个过程被称为编译Xcode中已经自带了一个内置的编译器来编译源代码。

    打包 -除了源代码,应用程序通常包含资源文件,如图片,文本文件,.xib文件,等等,所有这些资源将打包形成最终的应用程序。

    我们用来指这两个过程为构建过程。

    Xcode Build Option

    运行 -这实际上是启动模拟器,并加载您的应用程序。

    有问题吗?

    我尽我所能来解释如何Hello World应用程序的实际工作。作为一个没有编程经验初学者来说,我们刚才讨论的概念是不容易理解。所以,不要犹豫,问的问题在我们的论坛。我,以及其他有经验的成员都是热心的帮助。

    与往常一样,离开了我的教程,评论分享你的想法。有什么意见都欢迎。

    :-)

  • 相关阅读:
    leetcode 293.Flip Game(lintcode 914) 、294.Flip Game II(lintcode 913)
    Android开发 Fragment中调用startActivityForResult返回错误的requestCode
    AndroidStudio 编译异常java.lang.OutOfMemoryError: GC overhead limit exceeded
    Android 控制ScrollView滚动到底部
    安卓Textview的getLineCount返回0
    指定经纬度与数据库多条经纬度进行距离计算
    GPUImage 内置滤镜解析
    ViewPager中使用PhotoView时出现pointerIndex out of range异常
    “You must not call setTag() on a view Glide is targeting” 解决
    android studio出现Error:compileSdkVersion android-x requires compiling with JDK 7问题
  • 原文地址:https://www.cnblogs.com/haichao/p/2754119.html
Copyright © 2011-2022 走看看